我有一个数组:

myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}, etc.]

我无法更改阵列的结构。我收到了一个45的id,我想得到数组中该对象的“bar”。

如何在JavaScript或使用jQuery实现这一点?


当前回答

你可以试试Sugarjshttp://sugarjs.com/.

它在Arrays上有一个非常好的方法,.find。所以你可以找到这样的元素:

array.find( {id: 75} );

您还可以向其传递具有更多财产的对象,以添加另一个“where-clause”。

请注意,Sugarjs扩展了本地对象,有些人认为这非常邪恶。。。

其他回答

遍历数组中的任何项。对于您访问的每个项目,请检查该项目的id。如果匹配,请将其返回。

如果你只是想要代码:

function getId(array, id) {
    for (var i = 0, len = array.length; i < len; i++) {
        if (array[i].id === id) {
            return array[i];
        }
    }
    return null; // Nothing found
}

使用ECMAScript 5的Array方法也是一样的:

function getId(array, id) {
    var obj = array.filter(function (val) {
        return val.id === id;
    });

    // Filter returns an array, and we just want the matching item.
    return obj[0];
}

Undercore.js有一个很好的方法:

myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'},etc.]
obj = _.find(myArray, function(obj) { return obj.id == '45' })

最近,我不得不面对同样的事情,我需要从一个巨大的数组中搜索字符串。

经过一番搜索,我发现用简单的代码就能轻松处理:

代码:

var items = mydata.filter(function(item){
    return item.word.toLowerCase().startsWith( 'gk );
})

看见https://jsfiddle.net/maheshwaghmare/cfx3p40v/4/

使用本机Array.reduce

var array = [ {'id':'73' ,'foo':'bar'} , {'id':'45' ,'foo':'bar'} , ];
var id = 73;
var found = array.reduce(function(a, b){
    return (a.id==id && a) || (b.id == id && b)
});

如果找到,则返回object元素,否则为false

另一种解决方案是创建查找对象:

var lookup = {};
for (var i = 0, len = array.length; i < len; i++) {
    lookup[array[i].id] = array[i];
}

... now you can use lookup[id]...

如果需要进行多次查找,这一点尤其有趣。

这将不需要更多的内存,因为ID和对象将被共享。