2013-11-22 79 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

不客氣。 –