Map,findIndex和filter结合使用

时间:2018-05-07 00:07:07

标签: javascript

我来了across以下的功能,并不完全确定它在做什么。 .filter(note => note)具体是什么目的?

laneNotes: props.lane.notes.map(id => state.notes[
  state.notes.findIndex(note => note.id === id)
]).filter(note => note)

filter每个notes执行notes还是map循环所有$variable = array("apple" , "orange"); DB::table('table1')->where('some_field', $condition)->update(['field1' => $variable[0], 'field2' => $variable[1]]); 后只执行一次?

3 个答案:

答案 0 :(得分:3)

.filter(note => note)会过滤所有falsy个值。它相当于:.filter(Boolean)

Also does filter get executed for each notes 
or only once after all notes are looped over by map?

来自docs

  

filter()方法创建一个包含所有传递元素的新数组   由提供的函数实现的测试



console.log([0, 2, '', false, null, true, undefined].filter(item => item));
console.log([0, 2, '', false, null, true, undefined].filter(Boolean));




javascript中的所有falsy值:

  • null
  • false
  • 0
  • '' / ""
  • undefined
  • NaN

答案 1 :(得分:2)

检查note是否真实 - 如果不是真的,则该元素不会包含在计算的laneNotes中。

例如:



console.log(
  [0, 1, 2].filter(num => num)
);




有问题的代码更简单,看起来像这样:

laneNotes: props.lane.notes.map((id) => {
  const foundIndex = state.notes.findIndex(note => note.id === id);
  return state.notes[foundIndex];
}).filter(note => note);

使用findIndex查找匹配的note - 如果找不到匹配的note,则foundIndex将为-1,因此state.notes[foundIndex]将为未定义。 .filter函数的目的是将undefined s保留在结果之外。

答案 2 :(得分:1)

简单地 - .filter(n => n)删除空(非真实)值并且是 - 它遍历映射中的每个项目(由.map)数组返回

你一定要看到文档:mozilla.org -> filter:)