如何将两个json属性组合成一个数组

时间:2014-05-06 09:41:55

标签: javascript jquery json

我有这样的json数据:

var data = [{
    "RM_Name": "Cloud Strife",
    "Division": "Avalanche",
    "RM_Phone": "No Phone",
    "RC_Name": "No RM",
    "RC_Phone": "No Phone",
    "States_Covered": "Midgar,Nibelheim"
}, {
    "RM_Name": "Clint Eastwood",
    "Division": "Hollywood",
    "RM_Phone": "No Phone",
    "RC_Name": "No RC",
    "RC_Phone": "No Phone",
    "States_Covered": "Gran Torino"
}, {
    "RM_Name": "Barret Wallace",
    "Division": "Avalanche",
    "RM_Phone": "No Phone",
    "RC_Name": "Barry Allen",
    "RC_Phone": "No Phone",
    "States_Covered": "North Corel"
}, {
    "RM_Name": "Tifa Lockheart",
    "Division": "Avalanche",
    "RM_Phone": "No Phone",
    "RC_Name": "Aeris Gainsborough",
    "RC_Phone": "No Phone",
    "States_Covered": "Sector 7"
}];

现在我想创建一个由RM_Name和RC_Name组成的新数组,这样输出就像这样:

[Cloud Strife,Clint Eastwood,Barret Wallace,Barry Allen,Tifa Lockheart,Aeris Gainsborough]

我该怎么做?我尝试过使用$.merge()。但我认为输出是错误的。非常感谢任何帮助。

6 个答案:

答案 0 :(得分:3)

使用jQuery .each()迭代JSON。试试这个:

var dataArray = [];
$.each(data, function(i, v){
       dataArray.push(v.RM_Name);
       if(v.RC_Name !="No RC")
       dataArray.push(v.RC_Name);
});
console.log(dataArray);

DEMO FIDDLE

答案 1 :(得分:2)

不使用jQuery而忽略No RCNo RM

Demo Fiddle

var result = [];
for(var i = 0, l = data.length; i < l; ++i)
{
    if(data[i].RM_Name !== 'No RM')
       result.push(data[i].RM_Name);
    if(data[i].RC_Name !== 'No RC')
       result.push(data[i].RC_Name);
}
console.log(result);

这是做什么的:

  • 循环数据数组
  • 如果RC_Name不同于&#39;否RC&#39;将它推入数组
  • 如果RM_name不同于“没有RM&#39;将它推入数组
  • 输出数组

答案 2 :(得分:2)

功能选项(无Jquery)〜只有IE9 +,没有多边形填充。

var ar = data.reduce(function(previous, current)
{ 
    previous.push(current.RM_Name, current.RC_Name);  
    return previous;
}, []);

或(虽然不能过度阅读)

var ar = Array.prototype.concat.apply([], data.map(function(row){ 
    return [row.RM_Name, row.RC_Name]; 
}));

答案 3 :(得分:2)

<强> Demo Fiddle
jQuery

var toShow = new Array();
$.each(data,function(i,item){
    toShow.push(item.RM_Name);
    if(item.RC_Name !="No RC")
        toShow.push(item.RC_Name);
});  

它甚至会忽略每个"RC_Name":"No RC"

希望它有所帮助...

答案 4 :(得分:1)

在jquery中使用.each()

var name = [];
$.each(data, function( index, value ) {
        name.push(value.RM_Name);
        if(value.RC_Name !="No RC")
        name.push(value.RC_Name);  
});

console.log(name);

答案 5 :(得分:0)

$.map$.grep的另一种可能解决方案:

[].concat.apply($.map(data, function(o) {
    return $.grep([o.RM_Name, o.RC_Name], function(v) {
        return v !== 'No RM' && v !== 'No RC';
    });
}));

如果您不需要按值过滤属性,则可以省略$.grep部分:

[].concat.apply($.map(data, function(o) {
    return [o.RM_Name, o.RC_Name];
}));