数组indexOf与对象? [英] array indexOf with objects?
本文介绍了数组indexOf与对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我知道我们可以将数组值与JavaScript中的indexOf匹配.如果匹配,则不会返回-1.
I know we can match array values with indexOf in JavaScript. If it matches it wont return -1.
var test = [
1, 2, 3
]
// Returns 2
test.indexOf(3);
是否有匹配对象的方法?例如吗?
Is there a way to match objects? For example?
var test = [
{
name: 'Josh'
}
]
// Would ideally return 0, but of course it's -1.
test.indexOf({ name: 'Josh' });
推荐答案
由于两个对象是不同的(虽然可能是等效的),所以不能使用indexOf
.
Since the two objects are distinct (though perhaps equivalent), you can't use indexOf
.
您可以将findIndex
与回调一起使用,并根据所需的属性处理匹配.例如,要匹配所有可枚举的道具:
You can use findIndex
with a callback, and handle the matching based on the properties you want. For instance, to match on all enumerable props:
var target = {name: 'Josh'};
var targetKeys = Object.keys(target);
var index = test.findIndex(function(entry) {
var keys = Object.keys(entry);
return keys.length == targetKeys.length && keys.every(function(key) {
return target.hasOwnProperty(key) && entry[key] === target[key];
});
});
示例:
var test = [
{
name: 'Josh'
}
];
var target = {name: 'Josh'};
var targetKeys = Object.keys(target);
var index = test.findIndex(function(entry) {
var keys = Object.keys(entry);
return keys.length == targetKeys.length && keys.every(function(key) {
return target.hasOwnProperty(key) && entry[key] === target[key];
});
});
console.log(index);
请注意 findIndex
已在ES2015中添加,但可以完全填充.
Note that findIndex
was added in ES2015, but is fully polyfillable.
这篇关于数组indexOf与对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文