[英]Filter foreach index value in Javascript
如何使用条件过滤foreach Javascript中的索引值如果
last_login = 空
然后将过滤后的值存储到
this.search登录
下图是输出: console.log(obj);
这是我到目前为止所做的:
try {
this.searchTrigger = true
var obj = this.list;
this.searchLogin = [];
for (let i=0; i < obj.length; ++i){
if(obj.filter( x => obj[i].profile.last_login === null)){
this.searchLogin.push(obj[i]);
}
}
console.log('This are obj data passed to search login',this.searchLogin);
var obj = [ { profile: { last_login: null } }, { profile: { last_login: true } }, { profile: { last_login: null } }, { profile: { last_login: true } }, { profile: { last_login: null } }] //With filter and map console.log("With filter and map: ", obj.map((x, i) => ({ ...x.profile, i })) .filter(x => !x.last_login) .map(x => xi)); //With reduce console.log("With reduce: ", obj.reduce((p, c, i) => (!c.profile.last_login && p.push(i), p), []) )
有几点需要注意
filter
函数将返回一个数组,即使它为空(没有匹配的结果),它仍然会被评估为真,即你的 if 条件将始终被执行if
条件在 for 循环内有一个过滤器函数,这意味着您不必要地检查数组中所有对象的同一对象的条件,即对于每个对象,过滤器函数将返回空数组或所有对象的数组。 您可以使用Array.reduce并将last_login
信息存储在结果数组中
this.searchLogin = this.list.reduce((a,c) => c.profile.last_login === null ? a.concat(c.profile.last_login) : a, []);
我认为不需要再次将结果显式保存到数组中,数组上的过滤器本身将根据过滤条件创建一个结果数组。
有关过滤器的更多信息,
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
在你的情况下,
this.searchLogin = obj.filter( x => x.profile.last_login === null);
会做的伎俩。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.