Array.filter 接受一个应该返回 true 或 false 的函数,它指示是否应该保留数组中的特定元素。
你有一个数组对象,而对象本身可以有多个键和值。你需要一个多步骤的过程:
- 将数组对象减少为单个对象(如果多个对象包含相同的键,这可能会出现问题!)
- 从组合对象中选择值为 true 的键。
您可以使用 Object.assign 来合并对象。我们将使用 Array.reduce 将对象数组缩减为单个对象:
const combined = arry.reduce((acc, val) => Object.assign({}, acc, val))
这将产生一个包含所有键值对的对象:
// { country: false, fname: true, lname: true}
现在我们只需要选择具有真值的条目,这会产生一个数组数组:
const entries = Object.entries(combined).filter(([k, v]) => v)
// [["lname", true], ["fname", true]]
然后我们可以从该数组中映射出键,如下所示:
entries.map(([k, v]) => k)
// ["lname", "fname"]
为了简洁起见,这些步骤都可以链接在一起。
const arry = [{'fname': true}, {'lname': true}, {'country': false}];
Object.entries(arry.reduce((acc, val) => Object.assign({}, acc, val)))
.filter(([k, v]) => v)
.map(([k, v]) => k)