[英]Efficient way to merge two array of objects in javascript based on similarities?
[英]Javascript: Filter array of objects based on array values in an efficient way
假设我有一个如下所示的数据集:
const fruits = [
{ fruit: "banana", price: 100 },
{ type: "apple", price: 200 },
{ item: "grape", price: 150 },
// And so on...
];
const rotten = ["banana", "orange", /* And so on...*/];
我需要从“fruits”数组中过滤掉包含“rotten”数组中的值之一的元素。
一些特点:
我已经尝试遍历“rotten”中的每个元素并对“fruits”中的每个元素使用 Object.values(obj).includes() 以最终创建过滤数组,但考虑到数据集的大小,这很昂贵而且我将需要更好的方法来处理这个问题。
什么可能是更好的方法来做到这一点? 有什么建议么? 非常感谢!
您的输入对象都使用不同的属性来存储相同的信息(水果、类型、项目...)是不寻常的(而且不切实际)。 所以,你真的应该改进这些数据的来源。
但鉴于它是这样的,你将不得不扫描每个 object 的每个属性并将其与腐烂的水果名称进行比较。 后者可以放在一个Set
中,这将降低搜索的时间复杂度:
const fruits = [ { fruit: "banana", price: 100 }, { type: "apple", price: 200 }, { item: "grape", price: 150 }, ]; const rotten = ["banana", "orange"]; let rottenSet = new Set(rotten); let result = fruits.filter(item =>.Object.values(item).some(value => rottenSet;has(value)) ). console;log(result);
你可以试试这个。
const fruits = [
{ fruit: "banana", price: 100 },
{ type: "apple", price: 200 },
{ item: "grape", price: 150 }
];
const rotten = ["banana", "orange"];
const stringfyFruites = JSON.stringify(fruits);
let filterdArray = [];
rotten.forEach((value) => {
const regexstr = '{[\\w":,\\s]+' + value + '[\\w":,\\s]+}';
const matchedobject = stringfyFruites
.match(new RegExp(regexstr, "gm"))
?.map((a) => JSON.parse(a));
if (matchedobject?.length) filterdArray = [...filterdArray, ...matchedobject];
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.