迭代数组并在不同对象中查找相应的项目

问题描述 投票:0回答:3

我有一个包含以下部分/字段的对象:

{
    "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 有没有同样的方法?

javascript ecmascript-6
3个回答
0
投票

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);


0
投票

您可以通过使用

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);


-1
投票

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);

© www.soinside.com 2019 - 2024. All rights reserved.