我知道我们可以在JavaScript中将数组值与indexOf匹配.如果匹配则不会返回-1.
var test = [
1, 2, 3
]
// Returns 2
test.indexOf(3);
Run Code Online (Sandbox Code Playgroud)
有没有办法匹配对象?例如?
var test = [
{
name: 'Josh'
}
]
// Would ideally return 0, but of course it's -1.
test.indexOf({ name: 'Josh' });
Run Code Online (Sandbox Code Playgroud)
由于这两个对象是不同的(尽管可能相同),因此无法使用indexOf.
您可以使用findIndex回调,并根据所需的属性处理匹配.例如,匹配所有可枚举的道具:
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];
});
});
Run Code Online (Sandbox Code Playgroud)
例:
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);Run Code Online (Sandbox Code Playgroud)
请注意,这findIndex是在ES2015中添加的,但是完全可以填充.
| 归档时间: |
|
| 查看次数: |
6203 次 |
| 最近记录: |