簡體   English   中英

如何將兩個json屬性組合到一個數組中

[英]How to combine two json properties into one array

我有一個像這樣的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() 但是我認為輸出是錯誤的。 任何幫助是極大的贊賞。

使用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);

演示場

在不使用jQuery的情況下做到這一點,並且忽略了No RCNo RM

演示小提琴

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與'No RC'不同,則將其推入數組
  • 如果RM_name與'No RM'不同,則將其推入數組
  • 輸出數組

功能選項(無Jquery)〜兩者都僅IE9 +,不帶poly-fill。

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]; 
}));

演示小提琴
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"

希望能幫助到你...

在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);

$.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];
}));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM