我有一个API请求后返回的对象数组。它采取以下形式:
[{
id: 12,
slug: '050e8e8db93ae08ed46cd57017ef9617',
name: 'Test Badge'
}, {
id: 13,
slug: '78ed09b1f2aae29ab30915ac9f167bfa',
name: 'Test Badge'
}]
我需要在键上测试一个值x
:slug
,但我的对象数组是数百个对象。有没有办法在不手动循环遍历所有对象的情况下测试值?
答案 0 :(得分:3)
好吧 - 不知怎的,你必须循环。但至少JavaScript是为你做的工作:
var arr = [
{
id: 12,
slug: '050e8e8db93ae08ed46cd57017ef9617',
name: 'Test Badge'
},
{
id: 13,
slug: '78ed09b1f2aae29ab30915ac9f167bfa',
name: 'Test Badge'
}
];
var arrWithValue = arr.filter(function(el){ return el.slug === value; });
arrWithValue
仅包含具有正确值的数组元素。
当您必须经常访问这些数据时,最好循环一次并使用slug
key
保存每个对象。
var sortedObj = {};
for(var i = 0, len = arr.length; i < len; ++i){
sortedObj[arr[i].slug] = arr[i];
}
// access the object with sortedObj['someSlug']
答案 1 :(得分:0)
问题:您需要过滤器或测试数组的值吗?如果测试,那么最好使用some()函数。
更新: 根据jsPerf http://jsperf.com/json-stringify-vs-array-loop一些()更快800次然后filter()和5000然后JSON.stringify。
var data = [{
id: 12,
slug: '050e8e8db93ae08ed46cd57017ef9617',
name: 'Test Badge'
}, {
id: 13,
slug: '78ed09b1f2aae29ab30915ac9f167bfa',
name: 'Test Badge'
}];
function test(x) {
return data.some(function(d){return x==d.slug});
};
console.log(test('78ed09b1f2aae29ab30915ac9f167bfa'))
答案 2 :(得分:0)
另一个“非迭代”选项(这里可能是因为你的密钥非常具体),但这是最慢的,因为JSON.stringify操作缓慢:
function test(x) {
return JSON.stringify(data).indeхOf(x) > -1;
}