Jac*_*cob 14 javascript arrays
假设我有一个对象数组:
[{'a': 'something', 'b':12},
{'a': 'something', 'b':12},
{'a': 'somethingElse', 'b':12},
{'a': 'something', 'b':12},
{'a': 'somethingElse', 'b':12}]
Run Code Online (Sandbox Code Playgroud)
获取元素的最后一个索引的最最干净的方法是什么,其中a的值为'something'.在这种情况下3.有没有办法避免循环...
Raj*_*esh 19
您可以使用findIndex获取索引.这将为您提供第一个索引,因此您必须反转该数组.
var d = [{'a': "something", 'b':12}, {'a': "something", 'b':12}, {'a': "somethingElse", 'b':12}, {'a': "something", 'b':12}, {'a': "somethingElse", 'b':12}]
function findLastIndex(array, searchKey, searchValue) {
var index = array.slice().reverse().findIndex(x => x[searchKey] === searchValue);
var count = array.length - 1
var finalIndex = index >= 0 ? count - index : index;
console.log(finalIndex)
return finalIndex;
}
findLastIndex(d, 'a', 'something')
findLastIndex(d, 'a', 'nothing')Run Code Online (Sandbox Code Playgroud)
这是一个可重用的打字稿版本,该版本反映了ES2015 findIndex函数的签名:
/**
* Returns the index of the last element in the array where predicate is true, and -1
* otherwise.
* @param array The source array to search in
* @param predicate find calls predicate once for each element of the array, in descending
* order, until it finds one where predicate returns true. If such an element is found,
* findLastIndex immediately returns that element index. Otherwise, findLastIndex returns -1.
*/
export function findLastIndex<T>(array: Array<T>, predicate: (value: T, index: number, obj: T[]) => boolean): number {
let l = array.length;
while (l--) {
if (predicate(array[l], l, array))
return l;
}
return -1;
}
Run Code Online (Sandbox Code Playgroud)
您可以从头开始迭代,如果找到则退出循环。
var data = [{ a: 'something', b: 12 }, { a: 'something', b: 12 }, { a: 'somethingElse', b: 12 }, { a: 'something', b: 12 }, { a: 'somethingElse', b: 12 }],
l = data.length;
while (l--) {
if (data[l].a ==='something') {
break;
}
}
console.log(l);Run Code Online (Sandbox Code Playgroud)
反转数组对我来说听起来不是很简单,所以我对我非常相似的情况的解决方案是使用map()and lastIndexOf():
var lastIndex = elements.map(e => e.a).lastIndexOf('something');
Run Code Online (Sandbox Code Playgroud)
更新:来自dupe post的这个答案使它变得更好map(cond).lastIndexOf(true)
更新:虽然这不是最有效的解决方案,因为我们必须始终遍历所有数组,而如果我们从末尾运行,我们可以在找到第一个匹配项的那一刻结束搜索(@nico-timmerman的答案)。
let newArray = yourArray.filter((each)=>{
return (each.a === something)
});
newArray[newArray.length-1];
Run Code Online (Sandbox Code Playgroud)
你也可以
let reversedArray = yourArray.reverse();
reversedArray.find((each)=>{return each.a === something})
Run Code Online (Sandbox Code Playgroud)
更新-Array.prototype.findLastIndex现已可供使用-
var d = [{'a': "something", 'b':12}, {'a': "something", 'b':12}, {'a': "somethingElse", 'b':12}, {'a': "something", 'b':12}, {'a': "somethingElse", 'b':12}]
const lastIdx = d.findLastIndex(n => n.a === 'something');
console.log(lastIdx);Run Code Online (Sandbox Code Playgroud)
**使用前请查看此链接以了解支持哪些浏览器findLastIndex
您也可以使用reverseand来实现此目的findIndex,但性能不如使用findLastIndex
var d = [{'a': "something", 'b':12}, {'a': "something", 'b':12}, {'a': "somethingElse", 'b':12}, {'a': "something", 'b':12}, {'a': "somethingElse", 'b':12}]
const lastIdx = d.reverse().findIndex(n => n.a === 'something');
console.log(lastIdx);Run Code Online (Sandbox Code Playgroud)
findLastIndex - https://github.com/tc39/proposal-array-find-from-last
findIndex - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex
反向- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse
| 归档时间: |
|
| 查看次数: |
18606 次 |
| 最近记录: |