Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-根据值查找最新对象_Javascript - Fatal编程技术网

Javascript-根据值查找最新对象

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 },

我试图找到一种方法来搜索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
},{
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
循环确实是最快、最直接的。