javascript - 使用对象数组中的键查找 lastIndexOf() 对象

标签 javascript arrays object ecmascript-6 lastindexof

我正在寻找一种方法来从数组中的一个点找到 Javascript 中对象的最后一个索引。例如:

array.lastIndexOf(object.key, start);

到目前为止,我还没有找到解决这个问题的好方法。我可以从“开始”点拼接数组,反转它,然后在切片数组中搜索键值,但这对我来说似乎是一个低效的解决方案。

编辑:

为了进一步说明问题,我发布了我最终用来解决问题的代码。本质上;我所做的是我使用 While 循环遍历数组中的先前值。
getLastValue = (index) => {
  const arr = [
    {'d':'01-02-2017','v':'123'},
    {'d':'02-02-2017'},
    {'d':'04-02-2017'},
    {'d':'05-02-2017','v':'456'},
    ...
  ];

  let lastValue;

  while (arr[index] && !arr[index].v) {
    index--;
  }

  lastValue = arr[index];

  return lastValue;
}

最佳答案

就个人而言,我不会选择任何一种解决方案。原因如下:
最后索引:
问题在于在搜索数组时比较元素。它确实使用严格相等来比较元素。因此,比较对象总是会失败,除非它们是相同的。在 OP 情况下,它们是不同的。
切片和反向单线@adeneo
给定一个由三个元素组成的数组 [{key: A},{key: B},{key: C}]以及查找 key = D 的最后一个索引将为您提供 3 的索引.这是错误的,因为最后一个索引应该是 -1 (未找到)
遍历数组
虽然这不一定是错误的,但遍历整个数组以查找元素并不是最简洁的方法。效率很高yes ,但可读性可能会受到影响。如果让我选一个,我可能会选这个。如果可读性/简单性是您的 friend ,那么下面是另一种解决方案。

一个简单的解决方案
我们可以制作lastIndexOf工作,我们只需要使值具有可比性(严格相等符合)。或者简单地说:我们需要将对象映射到我们想要找到使用 javascript 原生实现的最后一个索引的单个属性。

const arr = [ { key: "a" }, { key: "b" }, { key: "c" }, { key: "e" }, { key: "e" }, { key: "f" } ];

arr.map(el => el.key).lastIndexOf("e"); //4
arr.map(el => el.key).lastIndexOf("d"); //-1

// Better:
const arrKeys = arr.map(el => el.key);
arrKeys.lastIndexOf("c"); //2
arrKeys.lastIndexOf("b"); //1
快速解决方案
简单的向后查找(尽可能简洁和快速)。注意 -1返回而不是空/未定义。
const arr = [ { key: "a" }, { key: "b" }, { key: "c" }, { key: "e" }, { key: "e" }, { key: "f" } ];

const lastIndexOf = (array, key) => {
  for(let i = array.length - 1; i >= 0; i--){
    if(array[i].key === key)
      return i;
  }
  return -1;
};

lastIndexOf(arr, "e"); //4
lastIndexOf(arr, "x"); //-1

关于javascript - 使用对象数组中的键查找 lastIndexOf() 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46367326/

相关文章:

C++:如何使数组可全局访问?

c - 带指针的 getcwd() 返回 "null"

ios - 用 nsmutabledata swift 填充数组

javascript - 过滤和组合具有相同属性的对象数组中的索引

JavaScript。对象的一个​​成员是否可以在不显式引用对象本身的情况下访问该对象的另一个成员?

JavaScript/AJAX 在应该显示图片时显示 "undefined"

javascript - 预输入回调不起作用

javascript - 具有名称增量的 Jquery 循环

javascript - jQuery 和 CSS - 在 slider 中将图像放在彼此后面以及如何重复我的功能?

javascript - 错误 : [orderBy:notarray] Expected array but received: {}