2017-05-06 20 views
0

我需要幫助如何做到這一點,我有待辦事項,我想如果它的ID是在爭論,像這樣的代碼來更新數組中的待辦事項isComplete屬性:如何檢查數組中的對象是否具有參數ID中存在的ID屬性?

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的待辦事項對象,然後將completeAllTodos isComplete屬性更新爲true。我也想異步做,但我是新的JavaScript。我一直在想如何做幾個小時,但我不能讓我的大腦做我想做的事。幫幫我?

+0

:'todoItem.id'不是一個函數參數 – Thomas

回答

1

如果你只是想設置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); 

如果你想要這個elems的太多:

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); 
+0

保存有效的名稱我天。謝謝 –

+0

@iamnewbie youre歡迎☺ –

+0

這個工程,但我可以看到你怎麼做與減少? –

1

這是一種方法。

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) 
+0

我試過[... todos,... completeAllTodos],但我想重寫2和3 ID的todos,幫助? –

1

只要做到這一切在濾波迴路塊:

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);

在過濾
+0

但這將覆蓋以前的迭代isComplete ... –

+0

@Jonasw啊是的,正確讓我修復...更新 – vol7ron

相關問題