根据数组的值返回对象的键

时间:2021-01-19 03:12:38

标签: javascript arrays object data-structures

我想问一下我有没有这样的对象

const dataArray = {
    key1: ["a", "b"],
    key2: ["c", "d"],
    key3: ["e", "f"],
};

我试过了

    const obj = Object.keys(dataArray).map((data, index) => {
        return dataArray[data];
        if (dataArray[data].indexOf("water") > -1) {
            return Object.keys(dataArray);
        }
    });

我想返回一个具有字符串 "c" 值的键 (key1, key2, key3)。

我该怎么做?请帮忙

2 个答案:

答案 0 :(得分:3)

你应该知道.map.find.filter的区别

const dataArray = {
    key1: ["a", "b"],
    key2: ["c", "d"],
    key3: ["e", "f"],
};
const result1 = Object.keys(dataArray).map((data, index) => {
        return dataArray[data];
        // The line below do not affect !!!
        if (dataArray[data].indexOf("water") > -1) {
            return Object.keys(dataArray);
        }
    });
console.log(result1.join(',')); // All records from `dataArray`

/*******Find one item => using find*/
console.log(Object.keys(dataArray).find(k => dataArray[k].includes("c")));

/*******Find multiple items => using filter*/
console.log(Object.keys(dataArray).filter(k => dataArray[k].includes("c") || dataArray[k].includes("e")));

<块引用>

map() 方法创建一个新数组,其中填充了以下结果 对调用数组中的每个元素调用提供的函数。

<块引用>

find() 方法返回第一个元素的值 提供的数组满足提供的测试功能。如果不 值满足测试函数,返回 undefined。

<块引用>

filter() 方法创建一个新数组,其中包含传递的所有元素 由提供的函数实现的测试

答案 1 :(得分:0)

您可以获取对象的条目(键/值对)并迭代以获取您想要的键(如果值包含 'c')

const dataArray = {
    key1: ["a", "b"],
    key2: ["c", "d"],
    key3: ["e", "f"],
};

const entries = Object.entries(dataArray);

for(let entry of entries){
    if(entry[1].includes('c')){
        console.log(entry[0])
    }
}