2017-08-30 37 views
0

我有以下功能:爲什麼我不能調用函數,但我可以在控制檯中打印它? JavaScript的

 var groceries = ["toothpaste", ["plums", "peaches", "pineapples"], ["carrots", "corn", "green beans"], "orange juice", ["chocolate", "ice cream"], "paper towels", "fish"]; 
     console.log("groceries", groceries); 

     function removeItems(arr, toRemove) { 
     function createKey(item) { 
      return Array.isArray(item) ? item.join('-') : item; 
     } 

     var removeDict = toRemove.reduce(function(d, item) { 
      var key = createKey(item); 
      d[key] = true; 

      return d; 
     }, {}); 

     console.log("removeDict", removeDict); 

     return arr.filter(function(item) { 
      var key = createKey(item); 

      return !removeDict[key]; 
     }); 
     } 

     var result = removeItems(groceries, ["fish", "orange juice", ["chocolate", "ice cream"]]); 

     console.log("result", result); 

(這來源於此之前的問題,我問): function to remove single items or arrays from within an array - javascript

如果我創建在調用該函數結束一個變量,它打印在控制檯正確。

但是,如果我嘗試直接調用該函數,就像這樣:

removeItems(groceries, ["fish", "orange juice", ["chocolate", "ice cream"]]); 

console.log("groceries", groceries); 

的項目沒有得到清除。爲什麼我不能直接調用該函數?我錯過了什麼嗎?

+6

因爲該函數返回一個新的數組,你丟棄 –

回答

1

數組過濾器方法返回一個新的過濾數組。

因此,您的原始數組沒有發生變異。

如果結果存儲在一個變量,你可以登錄該代替:

var newArr = removeItems(groceries, ["fish", "orange juice", ["chocolate", "ice cream"]]); 

console.log("groceries", newArr) 
+0

明白了。謝謝! – sprucegoose

+0

沒問題。很高興這幫助你。 –

相關問題