繁体   English   中英

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

[英]What is the most performant approach to return an array of matching elements between 2 objects in javascript?

给定 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

这是我的解决方案。

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

2 个对象是否包含匹配键

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

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

使用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']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM