繁体   English   中英

如何检查数组中的对象是否在参数ID中存在ID属性?

[英]How to check if objects in array have ID property present in the argument IDs?

我需要帮助,如何执行此操作,我有待办事项,并且如果其ID位于参数中,我想更新数组中的待办事项isComplete属性,类似于以下代码:

const todos = [{id: 1, text:"one",isComplete:false},{id:2,text:"two",isComplete:false},{id:3,text:"three",isComplete:false}];

const myArgs = [2,3];
const completeAllTodos = todos.filter(todoItem.id =>  myArgs.includes(todoItem.id)); 
completeAllTodos.map( todoItem => todoItem.isComplete = true);

在completeAllTodos上,我想返回在参数数组上具有ID的todos对象,然后将completeAllTodos isComplete属性更新为true。 我也想异步地做,但是我是javascript新手。 我已经思考了好几个小时了,但是我无法让自己的大脑做我想做的事情。 救命?

如果您只想将isCompletes设置为true:

const todos = [{id: 1, text:"one",isComplete:false},{id:2,text:"two",isComplete:false},{id:3,text:"three",isComplete:false}];
myArgs = [2,3];
todos.forEach(el=>myArgs.indexOf(el.id)+1?el.isComplete=true:0);

如果您也想要此元素:

const todos = [{id: 1, text:"one",isComplete:false},{id:2,text:"two",isComplete:false},{id:3,text:"three",isComplete:false}];
myArgs = [2,3];
var result=todos.filter(el=>myArgs.indexOf(el.id)+1).map(el=>!(el.isComplete=true)||el);

如果您同时想要:

const todos = [{id: 1, text:"one",isComplete:false},{id:2,text:"two",isComplete:false},{id:3,text:"three",isComplete:false}];
myArgs = [2,3];
var results=todos.reduce((arr,el)=>myArgs.indexOf(el.id)+1?(el.isComplete=true,arr.push(el),arr):arr);

http://jsbin.com/wopexiwime/edit?console

如果您确实需要异步实现(我不这么认为):

function forEach(arr,call,i=0){
   if(i>=arr.length){
      return;
   }
   call(arr[i],i);
   setTimeout(forEach,0,arr,call,i+1);
}

function filter(arr,call,finalcall,i=0,res=[]){
   if(i>=arr.length){
      return finalcall(res);
   }
   if(call(arr[i],i)) res.push(arr[i]);
   setTimeout(filter,0,arr,call,finalcall,i+1,res);
}

function map(arr,call,finalcall,i=0,res=[]){
   if(i>=arr.length){
      return finalcall(res);
   }
   res.push(call(arr[i],i));
   setTimeout(map,0,arr,call,finalcall,i+1,res);
}

map([1,2,3,4],(e,i)=>e+i,console.log);

这是一种方法。

const todos = [{
  id: 1,
  text: "one",
  isComplete: false
}, {
  id: 2,
  text: "two",
  isComplete: false
}, {
  id: 3,
  text: "three",
  isComplete: false
}];

const myArgs = [2, 3];
const completeAllTodos = todos
  .filter(todo => {
    return myArgs.includes(todo.id)
  })
  .map(todo => {
    todo.isComplete = true
    return todo
  });
console.log(completeAllTodos)

只需在filter循环块中完成所有操作:

 const todos = [{ id: 1, text: "one", isComplete: false }, { id: 2, text: "two", isComplete: false }, { id: 3, text: "three", isComplete: false }]; const args = [2, 3]; const completedTodos = todos.filter(item => args.includes(item.id) && (item.isComplete=true)); console.log(completedTodos); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM