从键中查找数组中的值

时间:2019-05-09 06:12:31

标签: jquery arrays

我有一个600个数组的数组(日期),如下所示: [{Case: 1, Date: 01012019},{Case: 2, Date: 01022019},{Case: 3, Date: 01032019}

基于键“ Case”从键“ Date”获取值的最佳方法是什么?

我知道我可以在数组上做一个简单的循环($ .each()),一旦找到要查找的键,就退出循环。据我至少读过的另一种选择是使用$ .map()函数。

我将需要在页面加载时查找50-100个项的键,因此使数组(日期)循环看起来很费劲。有没有更有效的方法? Og在这里说javescript / Jquery:)

2 个答案:

答案 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"]);