2013-11-25 4 views
0

У меня есть два разных json-массива для concat.получить значение из атипичного массива json

var json_1 = [{ 
    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 
}]; 


var json_2 = [{ 
    color: 'name', 
    number: "id", 
    x:  "cylinders", 
    y:  "horsepower" 
}]; 

Дальше Я делаю concat json_1 и json_2.

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

var data = $.concat(json_1, json_2); 

Теперь это очень интересно. Я хочу использовать значение ключа из json_2, чтобы иметь значение из данных. Сначала я определить varisble цвет

var color = data[data.length - 1].color; 

И как результат я могу увидеть

console.log("RESULT!!!! value from color is name", data.map(function(d) { 
    return d[color]; 
})); // solution ["dodge colt (sw)", "chevrolet chevelle concours (sw)"] 

Мой вопрос, как писать var color = data[data.length - 1].color; более умным, чтобы получить решение ["dodge colt (sw)", "chevrolet chevelle concours (sw)"]

Here is my DEMO :)

+0

Почему вы конкатенации двух массивов вместе? (Кстати, в вашем вопросе нет JSON. У вас есть массивы объектов. JSON всегда строка.) – nnnnnn

+0

как я понимаю, вам не нужно 'concat', а вам нужно' map' – Grundy

+0

да, я имеют массивы объектов. Я конкатенирую, потому что я передаю этот массив для работы. Мой вопрос в том, как написать var color = data [data.length - 1] .color; более умный, чтобы получить решение ["dodge colt (sw)", "chevrolet chevelle concours (sw)"] – toshkaexe

ответ

1

Вы должны использовать jQuery.parseJSON() для анализа строки JSON.

var jsonObj = $.parseJSON(''); // Insert your JSON string 
var color = jsonObj.color; 
+0

unforturnatly не работает! – toshkaexe

+0

«Не работает» не очень хорошо описано. –

+0

OP не имеет строки JSON. По крайней мере, в этом вопросе нет JSON. – nnnnnn

1

Я думаю, что вам не нужно concat и будет лучше, если вы используете какой-то объект, как это

var obj = {data:json_1, aliases:json_2[0]} 

и чем

var color = obj.aliases.color; 
obj.data.map(function(d) { 
    return d[color]; 
}) // solution ["dodge colt (sw)", "chevrolet chevelle concours (sw)"] 

, но если вы все еще хотите использовать concat вы можете сделать что-то вроде этого

data.map(function(d) { 
    return d[color]; 
}).filter(function(_){return _ !== undefined})); // solution ["dodge colt (sw)", "chevrolet chevelle concours (sw)"] 

или

data.slice(0,data.length-1).map(function(d) { 
    return d[color]; 
}) // solution ["dodge colt (sw)", "chevrolet chevelle concours (sw)"] 
Смежные вопросы