我在
https://blog.adriaan.io/make-array-with-objects-unique-on-multiple-keys-in-javascript.html
const browsers = [
{ os: "OS X",
os_version: "Catalina",
browser: "chrome",
browser_version: "30.0"
},
{
os: "Windows",
os_version: "7",
browser: "chrome",
browser_version: "40.0"
},
{
os: "Windows",
os_version: "7",
browser: "chrome",
browser_version: "50.0"
}
];
const makeUnique = (array = [], keys = []) => {
if (!keys.length || !array.length) return [];
return array.reduce((list, item) => {
const hasItem = list.find(listItem => keys.every(key => listItem[key] === item[key]) );
if (!hasItem) list.push(item);
return list;
},[]);
};
console.log(makeUnique(browsers, ["os", "os_version"]));
我想在我的objectarray中使用这个方法,但是我在一个键中使用键。有人知道如何使这个方法适应我的例子以便忽略双边界吗?
const tiles = [
{
name: "pattern1",
type: "jpg",
size: 1024,
bounds:{topleft_x: 45, topleft_y: 45, downright_x: -45, downright_y: -45},
},
name: "pattern2",
type: "jpg",
size: 1024,
bounds:{topleft_x: 90, topleft_y: 90, downright_x: 45, downright_y: 45},
},
name: "pattern3",
type: "jpg",
size: 1024,
bounds:{topleft_x: 45, topleft_y: 45, downright_x: -45, downright_y: -45},
},
//...
];
2条答案
按热度按时间qcbq4gxm1#
你需要一个遍历函数这个函数得到一个对象和一个叫做path的字符串,path类似于
bounds.topleft_y
并且需要更改makeUnique函数
下面是如何使用它
pdkcd3nj2#
任何重复数据删除算法的关键在于如何确定相等性。在您提供的示例算法中,检查
listItem[key] === item[key]
时会出现相等性。严格相等(===)非常适合比较基元值,但没有内置的方法来比较对象(如bounds
)。因此,您必须使用自定义值相等函数。有一个很棒的npm包
value-equal
可以帮你做到这一点,你也可以查看它的实现here。一旦你有了一个
valueEqual()
函数,你可以把它转换成如下的算法:然后,您可以像以前一样调用算法: