Javascript-根据值查找最新对象
我试图找到一种方法来搜索object的最新值,我发现的几乎都是使用Javascript-根据值查找最新对象,javascript,Javascript,我试图找到一种方法来搜索object的最新值,我发现的几乎都是使用reverse()或使用I--in-for-loop,但我想以某种方式避免它 我可以使用两个var将其归档,如下所示: var a=[{a:true},{a:true},{a:false}] var b=a.filter(el=>el.a==true) console.log(b[b.length-1])使用find仅获取一个匹配项 如果你不喜欢这个顺序,你也可以把它颠倒过来 var a=[{ a:是的, 身份证号码:1 },
reverse()
或使用I--in-for-loop
,但我想以某种方式避免它
我可以使用两个var
将其归档,如下所示:
var a=[{a:true},{a:true},{a:false}]
var b=a.filter(el=>el.a==true)
console.log(b[b.length-1])
使用find
仅获取一个匹配项
如果你不喜欢这个顺序,你也可以把它颠倒过来
var a=[{
a:是的,
身份证号码:1
},{
a:是的,
id:2,
},{
a:错,
身份证号码:3
}]
const latestValue=a.find(el=>el.a==true)
const lastValue=a.reverse().find(el=>el.a==true)
console.log(最新值);
console.log(lastValue)
您基本上是在寻找类似于.find
的东西,除了从最后一项开始并向后迭代的.find
,而不是从第一项开始并向前迭代。尽管有一些内置函数,如lastIndexOf
(类似于indexOf
,除了从最后一个元素开始搜索)和reduceRight
(相同,但对于reduce
),但不存在这样的函数。查找,因此您最好的选择是编写自己的函数。它很容易编写,不改变原始数组(如.reverse()
可以),并且不需要创建中间数组:
函数findRight(arr,回调){
for(设i=arr.length-1;i--;i>=0){
if(回调(arr[i],i,arr))返回arr[i];
}
}
var a=[{id:1,a:true},{id:2,a:true},{id:3,a:false}];
console.log(
findRight(a,el=>el.a==true)
);代码>我知道已经有答案,但我认为可以用另一种方式实现,所以这里是我的解决方案
您可以使用JavaScript数组映射函数获取最新值的索引,如下所示
注意:我已经修改了数组以包含更多元素
var a = [{a:true},{a:true},{a:false},{a:false},{a:false},{a:true},{a:true},{a:false}];
var latestIndexOfTrue = a.map(function(e) { return e.a; }).lastIndexOf(true)
console.log(latestIndexOfTrue);
/* above will give you the last index of the value you want (here i have tried with
* value true) and it will give you the index as 6 */
若你们想要整个对象,那个么你们可以用下面的代码得到它
console.log(a[latestIndexOfTrue]);
为什么您反对使用reverse()
?这似乎是最简单的方法(例如:a.reverse().find(e=>e.a)
)你的代码很好,它是可读的,并且完成了工作。它只是一个简单的JSObject,我把它转换成可读的代码,但我的实际代码很复杂,所以我想避免太多的var,只是为了让它工作。你如何定义“最新的”?只是在数组中建立索引?@JohanP实际上我想得到整个对象
它本身是否是唯一推荐使用reverse()
或for loop
的方法?reverse
不是一个好主意,因为如果在原始数组中调用它,它会变异原始数组,如果在中间数组中调用它,这意味着您已经创建了一个(不必要的)中间数组。使用for
循环没有任何问题。我相信人们可以想象其他方法来实现这一点,但是for
循环确实是最快、最直接的。