为了账号安全,请及时绑定邮箱和手机立即绑定

在javascript中返回2个对象之间的匹配元素数组的最高效方法是什么?

在javascript中返回2个对象之间的匹配元素数组的最高效方法是什么?

茅侃侃 2022-01-07 19:11:21
给定 javascript 中的以下 2 个对象:myFruit = { 'apple': 14, 'orange': 3, 'pear': 10}theirFruit = { 'banana': 10, 'grape': 30, 'apple': 2}返回匹配元素数组的最高效方式是什么?每个键的值无关紧要。下面是一个例子,但有些事情告诉我可能有更好的方法。let matches = [];let myKey;Object.keys(myFruit).forEach((key, index) => {  myKey = key;  Object.keys(theirFruit).forEach((theirKey, index) => {    if(myKey === theirKey) {       matches.push(theirKey);    }  });});console.log(matches);// will print: ['apple']console.log(matches.length);// will print: 1
查看完整描述

3 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

这是我的解决方案。


const matches = Object.keys(myFruit).filter(key => key in theirFruit);
 console.log(matches); // will output ['apple']


查看完整回答
反对 回复 2022-01-07
?
当年话下

TA贡献1890条经验 获得超9个赞

2 个对象是否包含匹配键


如果所有键都不同,则合并的对象将具有与每个对象一样多的键。


let haveAMatchingKey = Object.keys(Object.assign({}, myFruit, theirFruit)).length !=

    Object.keys(myFruit).length + Object.keys(theirFruit)

编辑后:


返回匹配元素数组的最高效方式?


let myFruitSet = new Set(Object.keys(myFruit));

let theirFruitKeys = Object.keys(theirFruit);

let matchingKeys = theirFruitKeys.filter(fruit => myFruitSet.has(fruit))


查看完整回答
反对 回复 2022-01-07
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

使用HashMap数据结构方法:


const findCommonFruits = () => {


    const myFruit = {

    'apple': 14,

    'orange': 3,

    'pear': 10

    }


    const theirFruit = {

    'banana': 10,

    'grape': 30,

    'apple': 2

    }


    // #1 select lowest object keys

    let lowestObj = null;

    let biggestObj = null;


    if (Object.keys(myFruit).length < Object.keys(theirFruit).length) {

        lowestObj = myFruit;

        biggestObj = theirFruit;

    } else {

        lowestObj = theirFruit;

        biggestObj = myFruit;

    }


    // 2 Define an actual hashmap that will holds the fruit we have seen it

    const haveYouSeenIt = {};


    for (let fruit of Object.keys(lowestObj)) {

        haveYouSeenIt[fruit] = fruit;

    }


    const res = [];


    for (let fruit of Object.keys(haveYouSeenIt)) {

        if (biggestObj[fruit] !== undefined) {

            res.push(fruit);

        }

    }


    return res;


}


console.log(findCommonFruits()); // ['apple']


查看完整回答
反对 回复 2022-01-07
  • 3 回答
  • 0 关注
  • 140 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信