从对象数组返回匹配对象

时间:2018-05-08 05:55:05

标签: javascript arrays

我想根据searchString.e.g搜索来自给定数组的匹配值对象.seatch string将是'Object 0'。

var objArray = [
   { id: 0, name: 'Object 0', otherProp: '321', secondVal:'stack' },
   { id: 1, name: 'O1', otherProp: 'Object 0', secondVal: 'Overflow' },
   { id: 2, name: 'Another Object', otherProp: '850', secondVal: 'Context' },
   { id: 3, name: 'Almost There', otherProp: '046', secondVal: 'Object 1' },
   { id: 4, name: 'Last Obj', otherProp: '78', secondVal: 'test' }
];

现在我想只搜索那些以Object为值的数组。意味着它应该归还给我0,1& 3对象

帮助将不胜感激

4 个答案:

答案 0 :(得分:1)

您可以使用array.filter方法执行此操作,并循环使用此过滤器方法中的所有属性。

var objArray = [
   { id: 0, name: 'Object 0', otherProp: '321', secondVal:'stack' },
   { id: 1, name: 'O1', otherProp: 'Object 0', secondVal: 'Overflow' },
   { id: 2, name: 'Another Object', otherProp: '850', secondVal: 'Context' },
   { id: 3, name: 'Almost There', otherProp: '046', secondVal: 'Object 0' },
   { id: 4, name: 'Last Obj', otherProp: '78', secondVal: 'test' }
];

var filteredArray = objArray.filter((obj) => {
  for (var key in obj) {
    if (obj[key] === 'Object 0') {
      return true;
    }
  }
  return false;
});

答案 1 :(得分:1)

您可以遍历数组中的每个对象,获取每个对象的键以防止自己处于对象中的动态属性,然后检查该键的值是否具有Object作为子字符串。请注意以下代码中的obj[key].toString()。使用toString()是因为您的id具有整数值而indexOf()适用于字符串值。因此,使用它可以防止错误。



var objArray = [
   { id: 0, name: 'Object 0', otherProp: '321', secondVal:'stack' },
   { id: 1, name: 'O1', otherProp: 'Object 0', secondVal: 'Overflow' },
   { id: 2, name: 'Another Object', otherProp: '850', secondVal: 'Context' },
   { id: 3, name: 'Almost There', otherProp: '046', secondVal: 'Object 1' },
   { id: 4, name: 'Last Obj', otherProp: '78', secondVal: 'test' }
];

var res = [];
objArray.filter((obj) => {
  Object.keys(obj).forEach((key)=>{
    if(obj[key].toString().indexOf('Object') !== -1){
      res.push(obj);
    }
  });
});

console.log(res);




答案 2 :(得分:0)

您可以在阵列中使用filter()来完成此操作。

以下是您正在寻找的样本

var objArray = [
   { id: 0, name: 'Object 0', otherProp: '321', secondVal:'stack' },
   { id: 1, name: 'O1', otherProp: 'Object 0', secondVal: 'Overflow' },
   { id: 2, name: 'Another Object', otherProp: '850', secondVal: 'Context' },
   { id: 3, name: 'Almost There', otherProp: '046', secondVal: 'Object 0' },
   { id: 4, name: 'Last Obj', otherProp: '78', secondVal: 'test' }
];

var resultArray = objArray.filter(function (d) { 
    return Object.values(d).indexOf('Object 0') != -1 
});

d方法中filter()的值从您的对象数组中获取每个对象。 Object.values()返回与对象中每个keys关联的值的数组。 indexOf()实质上检查您要匹配的字符串是否在数组中可用。如果匹配,结果将放入resultArray,否则忽略它。最终的resultArray如下所示:

[
    {id: 0, name: "Object 0", otherProp: "321", secondVal: "stack"},
    {id: 1, name: "O1", otherProp: "Object 0", secondVal: "Overflow"},
    {id: 3, name: "Almost There", otherProp: "046", secondVal: "Object 0"}
]

答案 3 :(得分:0)

您可以使用$number = 1234.56; // let's print the international format for the en_US locale setlocale(LC_MONETARY, 'en_US'); echo money_format('%i', $number) . "\n"; // USD 1,234.56 array.filter()array.includes()来执行此操作。

Object.values()