如何通过在对象内的数组中搜索字符串来查找值

时间:2017-09-06 06:12:36

标签: javascript arrays

我有以下对象:

 @media all and (min-width: 680px) {
.container {
 max-width: 1220px;
 text-align:left;
 background:#FFF;
 overflow:hidden;
 position:relative;
 box-shadow: 0px 2px 5px 0px #888888;
 margin: 0 auto;
 }
 section {
 float: left;
 width: 67.21311475%; 
 padding-left:1.63934426%;
 padding-right:1.63934426%;
 padding-top:15px;
 padding-bottom:15px;
 background:#FFF;
 position:relative;
 }
 aside {
 float: right;
 width: 26.22950819%;
 padding-left:1.63934426%;
 padding-right:1.63934426%;   
 padding-top:15px;
 padding-bottom:15px;
 background:#F9F9F9;
 position:relative;
 }
 }

我希望搜索“马铃薯”的数据并返回“蔬菜”。我希望使用过滤器或地图,但我正在努力学习语法。香草javascript请。

3 个答案:

答案 0 :(得分:1)

解决方案

var res = data.map(
    x => x.basket.indexOf("potato") === -1 ? undefined : x.type
).filter(x => x !== undefined);

res将是所有匹配type的列表(如果多次包含相同的值,则可以有多个。如果您确定,可以使用res[0]这些值是唯一的,在这种情况下,当它不存在时,您将获得type值或undefined

答案 1 :(得分:0)

使用Array#find函数迭代每个对象,并使用Array#someArray#includes迭代每个购物篮并检查是否有名称为potato的商品。

const data = [
  {
    type: "fruit",
    basket: ["apple", "pear", "orange"]
  },
  {
    type: "vegetable",
    basket: ["carrot", "potato"]
  }
];

const itemWithSome = data.find(item => item.basket.some(i => i === 'potato'));

console.log(itemWithSome.type);

const itemWithIncludes = data.find(item => item.basket.includes('potato'));

console.log(itemWithIncludes.type);

答案 2 :(得分:0)

您可以将Array#findArray#includes一起使用。



var data = [{ type: "fruit", basket: ["apple", "pear", "orange"] }, { type: "vegetable", basket: ["carrot", "potato"] }],
    find = 'potato';

console.log(data.find(o => o.basket.includes(find)).type);