对象数组中的indexOf方法?

岁酱吖の 提交于 2020-02-27 01:57:31

获取包含对象的数组的索引的最佳方法是什么?

想象一下这种情况:

var hello = {
    hello: 'world',
    foo: 'bar'
};
var qaz = {
    hello: 'stevie',
    foo: 'baz'
}

var myArray = [];
myArray.push(hello,qaz);

现在,我想拥有indexOf对象,该对象的hello属性为'stevie' ,在本示例中为1

我是JavaScript的新手,我不知道是否有一个简单的方法,或者是否应该构建自己的函数来做到这一点。


#1楼

或原型:

Array.prototype.indexOfObject = function arrayObjectIndexOf(property, value) {
    for (var i = 0, len = this.length; i < len; i++) {
        if (this[i][property] === value) return i;
    }
    return -1;
}

myArr.indexOfObject("name", "stevie");

#2楼

我认为您可以使用map函数在一行中解决它:

pos = myArray.map(function(e) { return e.hello; }).indexOf('stevie');

#3楼

我喜欢Pablo的回答,但是Array#indexOf和Array#map并非在所有浏览器上都起作用。 下划线将使用本机代码(如果可用),但也具有后备功能。 另外,它具有可实现Pablo匿名地图方法的功能的pluck方法。

var idx = _.chain(myArray).pluck("hello").indexOf("Stevie").value();

#4楼

我将更喜欢使用findIndex()方法:

 var index = myArray.findIndex('hello','stevie');

index将为您提供索引号。


#5楼

您可以创建自己的原型来执行此操作:

就像是:

Array.prototype.indexOfObject = function (object) {
    for (var i = 0; i < this.length; i++) {
        if (JSON.stringify(this[i]) === JSON.stringify(object))
            return i;
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!