[英]Javascript: Reading a key/value from a nested key value pair
我正在嘗試將嵌套的鍵/值Javascript對象的Category屬性作為數組輸出,如下所示。
var data = [{key: "A", values:[{Category:"One", amount:2000},
{Category: "Two", amount:2500},
{Category: "Three", amount: 3000},
{Category: "Four", amount: 3000}]
},
{key: "B", values:[{Category:"One", amount:2000},
{Category: "Two", amount:2500},
{Category: "Three", amount: 3000},
{Category: "Four", amount: 3000}]
},
{key: "C", values:[{Category:"One", amount:2000},
{Category: "Two", amount:2500},
{Category: "Three", amount: 3000},
{Category: "Four", amount: 3000}]
}]
預期的輸出如下:
["One","Two","Three","Four"]
我嘗試了幾種方法來實現這一目標。
我最接近的一個是帶有嵌套的地圖函數,如下所示。
下面的數據是包含上面的Javascript對象的變量。
x = data.map(function(el) {return el.values.map(function(ele,i){return
ele.Category;})})
但是輸出仍然是一個數組數組,如下所示。 我可以對此進行切片,然后只讀取返回的數組之一,但是我敢肯定,這樣做有更好的方法。
[["One","Two","Three","Four"],["One","Two","Three","Four"],
["One","Two","Three","Four"]]
任何建議將不勝感激。
您可以先展平返回的數組數組,然后使用Set
刪除所有重復的條目。
var data = [{key:"A",values:[{Category:"One",amount:2000},{Category:"Two",amount:2500},{Category:"Three",amount:3000},{Category:"Four",amount:3000}]},{key:"B",values:[{Category:"One",amount:2000},{Category:"Two",amount:2500},{Category:"Three",amount:3000},{Category:"Four",amount:3000}]},{key:"C",values:[{Category:"One",amount:2000},{Category:"Two",amount:2500},{Category:"Three",amount:3000},{Category:"Four",amount:3000}]}], x = data.map(v => v.values.map(c => c.Category)).reduce((a,b) => a.concat(b)), res = [...new Set(x)]; console.log(res);
這是一種不太神秘的方式。 您的設置有點有趣,因為有重復項,並且您似乎想消除了重復項。 ES6集非常適合此。 這樣可以為您提供所需的結果。
let data = [{key:"A",values:[{Category:"One",amount:2000},{Category:"Two",amount:2500},{Category:"Three",amount:3000},{Category:"Four",amount:3000}]},{key:"B",values:[{Category:"One",amount:2000},{Category:"Two",amount:2500},{Category:"Three",amount:3000},{Category:"Four",amount:3000}]},{key:"C",values:[{Category:"One",amount:2000},{Category:"Two",amount:2500},{Category:"Three",amount:3000},{Category:"Four",amount:3000}]}], set = new Set(); data.forEach(val => { let v = val.values.forEach ( x => { set.add(x.Category); }); }); console.log(Array.from(set));
我使用Underscore.js 。
var data = [
{
key: "A",
values: [
{Category: "One", amount: 2000},
{Category: "Two", amount: 2500},
{Category: "Three", amount: 3000},
{Category: "Four", amount: 3000}
]
},
...
];
var categories =
_.unique(
_.flatten(
_.map(data, function (item) {
return _.pluck(item.values, 'Category');
})
)
);
var data = [{key: "A", values:[{Category:"One", amount:2000}, {Category: "Two", amount:2500}, {Category: "Three", amount: 3000}, {Category: "Four", amount: 3000}] }, {key: "B", values:[{Category:"One", amount:2000}, {Category: "Two", amount:2500}, {Category: "Three", amount: 3000}, {Category: "Four", amount: 3000}] }, {key: "C", values:[{Category:"One", amount:2000}, {Category: "Two", amount:2500}, {Category: "Three", amount: 3000}, {Category: "Four", amount: 3000}] } ]; var ans = data.reduce(function(acc, el) { return acc.concat(el.values.map(x => x.Category)); }, []) var result = [...new Set(ans)] console.log(result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.