Hon*_*iao 9 javascript typescript
更新:虽然这个问题被标记为与此重复.但@ssube的方式很整洁,更聪明.
UPDATE2:@Grungondola的评论似乎有新方法.
我正在使用Typescript.
这很好用.
var array1 = [];
array1.push(5);
array1.push(6);
console.log("a", array2.indexOf(6));
Run Code Online (Sandbox Code Playgroud)
但这不行.因为array2.indexOf返回-1,这意味着它找不到它.
var array2 = [];
array2.push({aa:5,bb:5});
array2.push({aa:6,bb:6});
console.log(array2.indexOf({aa:6,bb:6}));
Run Code Online (Sandbox Code Playgroud)
看起来indexOf不支持Object.TypeScript有自己的方法来处理这类问题吗?谢谢.
ssu*_*ube 23
不是.问题不Object在于,而在于您正在创建两个不同的对象.
object literal syntax({foo: 'bar'})声明一个内联对象.执行脚本时,将创建对象.多次使用该语法会创建多个对象.
您可以轻松地测试它{foo: 3} === {foo: 3}.这将评估为false,但它们不是同一个对象(引用).
该indexOf方法检查数组中是否存在对象,字符串,数字等.您正在传递一个不在数组中的新对象.
如果你有对象的引用,你可以使用它indexOf并将工作:
var foo = {aa:5,bb:5}, bar = {aa:6,bb:6};
var array2 = [];
array2.push(foo);
array2.push(bar);
console.log(array2.indexOf(foo));
Run Code Online (Sandbox Code Playgroud)
因为您指的是同一个实例,所以这将打印索引.
function deepIndexOf(arr, obj) {
return arr.findIndex(function (cur) {
return Object.keys(obj).every(function (key) {
return obj[key] === cur[key];
});
});
}
var array2 = [];
array2.push(foo);
array2.push(bar);
console.log(deepIndexOf(array2, foo));
Run Code Online (Sandbox Code Playgroud)
这不会递归到嵌套对象中,但会完成您正在寻找的比较(两个对象及其直接字段的等效性).
| 归档时间: |
|
| 查看次数: |
45225 次 |
| 最近记录: |