JS .filter()在传入intereger时起作用,但在传入变量时不起作用

时间:2018-11-10 17:22:19

标签: javascript ecmascript-6

我正在尝试使用.filter将对象从对象数组中拉出。

当我这样做时:

var homeCountry = this.props.searchedCountry.filter(country => country.id === 7);

我得到一个过滤后的数组,但是当我这样做时:

var homeCountry = this.props.searchedCountry.filter(country => country.id === e.target.country.value);

其中e.target.country.value === 7,我得到一个空数组。

任何人都可以解释发生了什么吗?谢谢!

2 个答案:

答案 0 :(得分:1)

e.target.value是字符串值。您正在与数据类型和值进行严格比较。

更新代码

 var homeCountry = this.props.searchedCountry.filter(country => country.id === parseInt(e.target.country.value));

答案 1 :(得分:0)

e.target.value将是一个字符串,但是它们是多种处理方式,可以使用parseInt(e.target.value)Number(e.target.value)e.target.valueAsNumber。其次,===会检查您正在比较的操作数的值以及数据类型,因此{1 === "1"会被评估为false,而1 === 1会被评估为true,执行{ {1}}仅会比较这些值,如果要使用==(非严格等于),则不必使用上面建议的解决方案来解决问题,因此(==)是正确的,(1 == 1也是正确的,但是如果您想使用1 == "1"(建议),请使用上面建议的解决方案