如何在有条件的情况下在foreach Javascript中过滤索引值
last_login = null
然后将过滤后的值存储到
this.searchLogin
以下图片是以下内容的输出: 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);
答案 0 :(得分:1)
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 => x.i));
//With reduce
console.log("With reduce: ",
obj.reduce((p, c, i) => (!c.profile.last_login && p.push(i), p), [])
)
答案 1 :(得分:0)
需要注意一些要点
filter
函数将返回一个数组,即使它为空(没有匹配的结果),它仍将被评估为true,即您的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, []);
答案 2 :(得分:0)
我认为无需将结果再次明确地保存到数组中,数组上的过滤器本身将根据过滤条件创建一个结果数组。
有关过滤器的更多信息,
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
就您而言,
this.searchLogin = obj.filter( x => x.profile.last_login === null);
可以解决问题。