我有一个包含以下部分/字段的对象:
{
"section-1": {
"fields": [
{"id": "field1", value: "Field1"},
{"id": "field2", value: "Field2"}
]
},
"section-2": {
"fields": [
{"id": "field3", value: "Field3"},
{"id": "field4", value: "Field4"}
]
},
"section-3": {
"fields": [
{"id": "field5", value: "Field5"},
{"id": "field6", value: "Field6"}
]
}
}
现在有一个动态数组,如下所示:
['field1', 'field5']
我想要的是迭代上述数组项(即
'field1'
和 'field5'
)并找到其中存在字段 id 的相应部分。
所以对于上面的例子,我想要的输出如下:
['section-1', 'section-3']
ES6 有没有同样的方法?
filter()
Object.keys()
,您可以在其中检查要查找的数组中的 some()
field.id
的 includes()
。
const data = {
"section-1": {
"fields": [
{"id": "field1", value: "Field1"},
{"id": "field2", value: "Field2"}
]
},
"section-2": {
"fields": [
{"id": "field3", value: "Field3"},
{"id": "field4", value: "Field4"}
]
},
"section-3": {
"fields": [
{"id": "field5", value: "Field5"},
{"id": "field6", value: "Field6"}
]
}
}
const ids = ['field1', 'field5'];
const res = Object.keys(data).filter(k => data[k].fields.some(f => ids.includes(f.id)));
console.log(res);
您可以通过使用
Object.keys
和 find
方法结合一些数组迭代来做到这一点
const data = {
"section-1": {
"fields": [
{"id": "field1", value: "Field1"},
{"id": "field2", value: "Field2"}
]
},
"section-2": {
"fields": [
{"id": "field3", value: "Field3"},
{"id": "field4", value: "Field4"}
]
},
"section-3": {
"fields": [
{"id": "field5", value: "Field5"},
{"id": "field6", value: "Field6"}
]
}
};
const dynamicArray = ['field1', 'field5'];
const result = dynamicArray.map(fieldId =>
Object.keys(data).find(section =>
data[section].fields.some(field => field.id === fieldId)
)
);
console.log(result);
const obj = {
"section-1": {
"fields": [
{"id": "field1", value: "Field1"},
{"id": "field2", value: "Field2"}
]
},
"section-2": {
"fields": [
{"id": "field3", value: "Field3"},
{"id": "field4", value: "Field4"}
]
},
"section-3": {
"fields": [
{"id": "field5", value: "Field5"},
{"id": "field6", value: "Field6"}
]
}
};
const filter = ['field1', 'field5'];
const result = Object.keys(obj).reduce((r, k) => (obj[k].fields.some(({id}) => filter.includes(id)) && r.push(k), r), []);
console.log(result);