【问题标题】:Node JS Array of Objects - get indexOf节点 JS 对象数组 - 获取 indexOf
【发布时间】:2017-09-24 18:30:58
【问题描述】:

我有一个对象数组。我试图在这个数组中定位一个对象的索引,但是它总是返回-1,除非我“作弊”。我看不到这里的区别,它 console.logs 两种方式完全相同的输出。它只能以一种方式工作......这是一个错误吗?

var arr = [{ un: 'test', uid: 1 }];
console.log("array",arr,typeof arr);

var obj = { un: 'test', uid: 1};
console.log("obj",obj);

console.log(arr[0],typeof arr[0]);
console.log("indexOf",arr.indexOf(obj));

arr.push(obj);
console.log(arr);
console.log("indexOf",arr.indexOf(obj));

输出是这样的:

array [ { un: 'test', uid: 1 } ] object
obj { un: 'test', uid: 1 }
{ un: 'test', uid: 1 } 'object'
indexOf -1
[ { un: 'test', uid: 1 }, { un: 'test', uid: 1 } ]
indexOf 1

对于我的生活,我看不出这里有什么不同。我在这里错过了一些简单的东西吗?有可能...考虑到编码的时间,简单的事情会被忽略。

【问题讨论】:

    标签: arrays node.js object


    【解决方案1】:

    在javascript中,对象总是对对象本身的引用(指向存储对象的内存地址的指针),所以这样做

    var arr = [{ un: 'test', uid: 1 }];
    var obj = { un: 'test', uid: 1};
    console.log("obj",obj);
    

    永远不会返回 -1 以外的任何值,因为 obj 的地址与 arr 中的对象不同。这就是为什么,如果你推 objin arr 它确实有效。

    所以Array.prototype.indexOf 以对象为参数将寻找相同的引用,而Array.prototype.indexOf 以数字、字符串、null 将寻找值。

    如果您想查找具有特定属性的对象的索引,请使用:

    var arr = [{ un: 'test', uid: 1 }];
    var index = arr.findIndex(i => i.un === 'test' && i.uid === 1);
    

    这里是 findIndex 的文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex

    【讨论】:

    • 感谢您的回答。我明白。是否有其他方法可以在没有“for”循环或 lodash 的某些语法的情况下获取数组内对象的索引?
    • 我用.findIndexmethod 添加了这个例子。你不需要 lodash :)
    • 太棒了。感谢您在这里的帮助。很有帮助。我之前尝试过 findIndex,但我一定是打错了,因为它报告了一个无效的函数。有时我注意到 node.js 没有 javascript 的所有原型,所以我显然看起来不够接近。
    • 确实,ECMA 标准领先于大多数 Javascript 实现。 Javascript 本身是一个规范,就像一个协议或一个规范,然后多个引擎实现它,但显然就像任何规范一样,它总是领先于它的实现。在极少数情况下,实现会定义规范,我相信 Promise 类会发生这种情况。
    猜你喜欢
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    相关资源
    最近更新 更多