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

问题描述

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

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

我该怎么做?请帮忙

解决方法

你应该知道.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() 方法创建一个新数组,其中包含传递的所有元素 由提供的函数实现的测试

,

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

const dataArray = {
    key1: ["a",};

const entries = Object.entries(dataArray);

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