三元过滤功能

时间:2018-10-29 06:59:03

标签: javascript reactjs filter callback coercion

这困扰着我好几个小时...我还不明白为什么。 我有一系列对象。我的语法对三进制有害吗?...

这很重要,它在React中。
数组如下所示

[{id:1, name:'steve'}, {id:2, name:'john'}] 

如果我使用它,它将正常工作。

array.filter(item => { if (item.id ==id) return item.name} )

如果我使用它,它将返回我整个数组,而不进行任何过滤。

array.filter(item => item.id ===id ? item.name : 'null')

3 个答案:

答案 0 :(得分:4)

为什么不像Array#filter那样期望比较结果呢?

array.filter(item => item.id === id)

回调的返回值不会更改filter之外的任何内容,而只是过滤的结果。

答案 1 :(得分:3)

Array.filter()的工作方式是从返回true值的数组中选择那些元素。这并不意味着布尔值true,而是定义的任何值。因此,在您的代码中,您将返回null并用引号引起来的else部分是一个字符串,而不是实际上的一个null值。因此,它认为它是真实的,并在过滤后的数组中考虑该对象。将其更改为null即可使用。

var array = [{
    id: 10,
    name: "name10"
  },
  {
    id: 20,
    name: "name20"
  }
];
var id = 20;
var res = array.filter(item => item.id === id ? item.name : null);
console.log(res);

答案 2 :(得分:0)

您使用的filter错误。
您可以检查documentation并查看callback参数是一个返回truefalse的函数。
因此,在您的情况下-您想按ID过滤数组,然后仅选择名称。
您可以链接filtermap

例如,

let array = [{id:1, name:'steve'}, {id:2, name:'john'}];
let result = array
  .filter(item => item.id === 1)
  .map(item => item.name);

console.log(result);