首页 > 解决方案 > Object.entries() 将键转换为数组

问题描述

我正在拉入一个对象,当我执行 console.log() 时,它会以这种格式返回数据:

{PerformanceYear:
  [{2020: "2020", checked: false}
   {2019: "2019", checked: true}
   {2018: "2018", checked: false}
   {2017: "2017", checked: false}
  ],
 Region: 
  [{1: "WA", checked: true}
   {2: "OR", checked: false}
   {3: "MT", checked: false}
   {4: "Other", checked: false}
  ],
 Service Area:
  [{5: "Northwest", checked: false}
   {6: "Southwest", checked: true}
   {7: "Southeast", checked: true}
   {8: "Other", checked: false}
  ],
}

(所以整个数据集是一个对象,而不是一个数组)

我正在尝试过滤,但这只能在数组上完成,所以我使用 Object.entries() 将其转换为数组。唯一的问题是 PerformanceYear、Region 和 Service Area 中的每一个成为了它们自己独立的数组,所以当我尝试这个时:

var filtered = [];
for (var i = 0; i < entries.length; i++) {
    for (var x = 0; x < entries[i][1].length; x++)
        if (entries[i][1][x].checked === true) {
            filtered.push(entries[i][1][x]);
        }
}
console.log(filtered)

我明白了:

[{2019: "2019", checked: true},
 {1: "WA", checked: true},
 {6: "Southwest", checked: true},
 {7: "Southeast", checked: true}
]

想要得到的是:

[PerformanceYear: {2019: "2019", checked: true},
Region: {1: "WA", checked: true},
Service Area: {6: "Southwest", checked: true}, {7: "Southeast", checked: 
true}
]

如果我尝试filtered.push(entries[i][1]),它不会过滤掉选中的=== false 值。有没有办法过滤原始对象而不将其转换为数组?或者有没有办法在不使用 array.entries() 的情况下将原始对象转换为数组?我已经为此工作了两天,似乎没有取得太大进展。蒂亚!

标签: javascriptarrays

解决方案


假设您想保留外部键,您可以获取条目并过滤数组。

var data = { PerformanceYear: [{ 2020: "2020", checked: false }, { 2019: "2019", checked: true }, { 2018: "2018", checked: false }, { 2017: "2017", checked: false }], Region: [{ 1: "WA", checked: true }, { 2: "OR", checked: false }, { 3: "MT", checked: false }, { 4: "Other", checked: false }], ServiceArea: [{ 5: "Northwest", checked: false }, { 6: "Southwest", checked: true }, { 7: "Southeast", checked: true }, { 8: "Other", checked: false }] },
    result = Object.fromEntries(Object
        .entries(data)
        .map(([k, a]) => [k, a.filter(({ checked }) => checked)])
    );

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读