首页 > 解决方案 > 如何查找 JSON 数据中的一项是否等于数组中的值之一?

问题描述

我已经找到并尝试.includes帮助解决这个问题。但.includes没有按我的预期工作。它实际上确实在 JSON 中找到了一个与另一个数组中的值匹配的项目,但它只匹配相似的值

result_postid 数组

[10,22,12,36,45,206]

来自 JSON 数据的 item.id

[{"id":"5","username":"Mike"},{"id":"13","username":"Tom"},{"id":"28","username":"Jake"},{"id":"136","username":"Josie"},{"id":"400","username":"Bill"},{"id":"538","username":"Sam"}]

我试图弄清楚为什么某些值true在应该清楚的时候仍然返回false。然后我得出的结论.includes实际上是36取自inresult_postid并将其与136in匹配item.id。这就是我设置 if 语句的方式.includes

{result_postid.includes(item.id) ?
 <Text>True</Text>
 :
 <Text>False</Text>
}

这是结果:

result_postid | item.id | Result

10 != 5,13,28,136,400,538: False
22 != 5,13,28,136,400,538: False
12 != 5,13,28,136,400,538: False
36 =  5,13,28,136,400,538: True <--- this should be false
45 != 5,13,28,136,400,538: False
206 != 5,13,28,136,400,538: False

然后我用 Lodash 尝试了这个尝试:

{_.intersection(item.id, result_postid) ?
<Text>True</Text>
 :
 <Text>False</Text>
}

结果都来了true,这是不正确的:

10 = 5,13,28,136,400,538: True
22 = 5,13,28,136,400,538: True
12 = 5,13,28,136,400,538: True
36 = 5,13,28,136,400,538: True 
45 = 5,13,28,136,400,538: True
206 = 5,13,28,136,400,538: True

甚至可以将数组中的值与 JSON 数据进行比较,并显示一个值是否彼此相等,如果是的话?如果不是,是假的?

标签: arraysjsonif-statementreact-nativelodash

解决方案


这是一种获得所需结果的方法。由于您将字符串与整数进行比较,因此您的结果与您期望的不一样。

var data = [{"id":"5","username":"Mike"},{"id":"13","username":"Tom"},{"id":"28","username":"Jake"},{"id":"136","username":"Josie"},{"id":"400","username":"Bill"},{"id":"538","username":"Sam"}]

var arr = [10,22,12,36,45,206]

console.log(data.map(({id}) => arr.includes(+id)))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>

通过这样做,+id您可以在下一次操作之前将字符串转换为数字。


推荐阅读