我要引入一个对象,当我执行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]),它不会过滤掉选中的===假值。有没有一种方法可以过滤原始对象而不将其变成数组?还是有一种方法可以在不使用array.entries()的情况下将原始对象变成数组?我已经为此工作了两天,但似乎并没有取得太大进展。 TIA!
答案 0 :(得分:1)
假设您想保留外键,则可以获取条目并过滤数组。
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; }