ksa*_*iya 0 javascript reduce object filter
假设我有一个具有结构的对象
data = {
a : [{values: {key1: 5, key2: "abc"}}, {values: {key1: 3, key2: "abc"}}, {values: {key1: 4, key2: "cde"}}],
b : [{values: {key1: 3, key2: "ffe"}}, {values: {key1: 11, key2: "gga"}}, {values: {key1: 7, key2: "abc"}}]
}
Run Code Online (Sandbox Code Playgroud)
我想提取元素 where key2 == "abc"。
预期输出:
data = {
a : [{values: {key1: 5, key2: "abc"}}, {values: {key1: 3, key2: "abc"}}],
b : [{values: {key1: 7, key2: "abc"}}]
}
Run Code Online (Sandbox Code Playgroud)
我试图遵循类似的例子,但未能实现我想要的。
使用Object.entries()提取的所有键/值对data作为数组,映射每一对过来,然后filter对每个值,提取你想要的人。
然后你可以加入它备份使用 Object.fromEntries()
const data = {
a : [{values: {key1: 5, key2: "abc"}}, {values: {key1: 3, key2: "abc"}}, {values: {key1: 4, key2: "cde"}}],
b : [{values: {key1: 3, key2: "ffe"}}, {values: {key1: 11, key2: "gga"}}, {values: {key1: 7, key2: "abc"}}]
}
const findKey = 'key2'
const findValue = 'abc'
const newData = Object.fromEntries(Object.entries(data).map(([ key, val ]) =>
[ key, val.filter(({ values }) => values?.[findKey] === findValue) ]))
console.log(newData)Run Code Online (Sandbox Code Playgroud)
如果您还没有看过Optional Chaining,这...
values?.[findKey] === findValue
Run Code Online (Sandbox Code Playgroud)
相当于
!!values && values[findKey] === findValue
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |