我有一个600个数组的数组(日期),如下所示:
[{Case: 1, Date: 01012019},{Case: 2, Date: 01022019},{Case: 3, Date: 01032019}
基于键“ Case”从键“ Date”获取值的最佳方法是什么?
我知道我可以在数组上做一个简单的循环($ .each()),一旦找到要查找的键,就退出循环。据我至少读过的另一种选择是使用$ .map()函数。
我将需要在页面加载时查找50-100个项的键,因此使数组(日期)循环看起来很费劲。有没有更有效的方法? Og在这里说javescript / Jquery:)
答案 0 :(得分:1)
首先将数组转换为由Case
索引的对象,然后不必使用for
循环或.find
来每次都找到关联的对象,而只需使用对象属性查找即可找到关联的对象:
const dates = [{
Case: 1,
Date: 01012019
}, {
Case: 2,
Date: 01022019
}, {
Case: 3,
Date: 01032019
}];
const datesByCase = dates.reduce((a, item) => {
a[item.Case] = item;
return a;
}, {});
// now say we want to find objects associated with case 2 and 3:
console.log(datesByCase['2']);
console.log(datesByCase['3']);
要找到N个案例,总的来说复杂度为O(N)
。 (要查找的每个for
使用Case
循环总体上具有O(N^2)
的复杂性)
答案 1 :(得分:0)
如果案例是唯一的,请尝试将数组转换为对象,这可以帮助您避免每次循环:
像这样转换:
const dates = [{
Case: 1,
Date: 01012019
}, {
Case: 2,
Date: 01022019
}, {
Case: 3,
Date: 01032019
}];
let obj = {};
dates.map((date)=>obj[date.Case]=date.Date);
console.log(obj);
console.log('case "1" date is '+obj["1"]);