簡體   English   中英

Javascript:從嵌套鍵值對中讀取鍵/值

[英]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.

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