2013-11-22 135 views
0

我将两个json数组连接起来。从连接数组中获取值

JAVASCRIPT

var json_from_data = [{acceleration: 15, 
       cylinders: 4, 
       displacement: 98, 
       horsepower: 80, 
       id: 90, 
       model_year: 72, 
       mpg: 28, 
       name: "dodge colt (sw)", 
       origin: 1, 
       weight: 2164}, 

{acceleration: 14, 
cylinders: 8, 
displacement: 307, 
horsepower: 130, 
id: 80, 
model_year: 72, 
mpg: 13, 
name: "chevrolet chevelle concours (sw)", 
origin: 1, 
weight: 4098}], 


    json_from_form = [{color: 'displacement', 
       name: "name", 
       x: "mpg", 
       y: "acceleration"}]; 

这是一个用钥匙

console.log(new_data); 
console.log(new_data[2].color); 
console.log("id", new_data.map(function(d) { return d.id})); 
console.log("mpg", new_data.map(function(d) { return d.mpg})); 
console.log("color", new_data.map(function(d) { return d.color})); 

如果我这样做是为了Concat的两个数组

$.concat||$.extend({concat:function(b,c){var a=[];for(x in arguments)a=a.concat(arguments[x]);return a}}); 
var new_data = $.concat(json_from_data, json_from_form); 

现在我想从new_data有值的函数我正在接收未定义的解决方案。

id [90, 80, undefined] 
mpg [28, 13, undefined] 
color [undefined, undefined, "displacement"] 

如何避免未定义的值,如果我想从串联数组有价值?

我想有一个像

id [90, 80] 
mpg [28, 13] 
color ["displacement"] 

这里的解决方案是我的DEMO

回答

0

只写了过滤功能,如:

function test(arr) { 

    return arr.filter(function(ele) { 

     return ele !== undefined; 
    }); 
} 

http://jsfiddle.net/j89aB/

+0

号欲后 '的console.log( “ID”,new_data.map(函数(d){返回} d.id)); console.log(“mpg”,new_data.map(function(d){return d.mpg})); (“color”,new_data.map(function(d){return d.color}));' 无所事事 – toshkaexe

0

这似乎来自您的map()功能离子,而不是你的数组连接。看起来你的map()函数返回undefined,然后它被包含到你看到的结果数组中。

最标准的方法是以filter(),map结果排除未定义的值。

var isDefined = function(v) {return v !== undefined;} 
console.log("id", new_data.map(function(d) { return d.id}).filter(isDefined)); 
console.log("mpg", new_data.map(function(d) { return d.mpg}).filter(isDefined)); 
console.log("color", new_data.map(function(d) { return d.color}).filter(isDefined)); 

或者,您可以创建一个“mapValuesOnly()”函数来组合这两个行为。

function mapValuesOnly (arr, func) { 
    var results = arr.map(func); 
    results = results.filter( 
     function(v) {return v !== undefined;}); 
    return results; 
} 
+0

谢谢!这是工作!!! – toshkaexe

+0

不客气。 –