Javascript按文本搜索对象

时间:2018-09-19 00:51:25

标签: javascript typescript

我将如何在javascript中编写一个通用函数,该函数将在对象数组上进行搜索以得到结果。

例如,假设我有一个对象数组。

var arr= [
   {a: 1011, b: "abc"}, 
   {a: 2012, b: "abd"}, 
   {a: 2013, b: "cbde"}, 
   {a: 2014, b: "xyz"}
];

Search(arr,“ 101”)将在数组下方返回

 [{a: 1011, b: "abc"}]

和Search(arr,“ bd”)将在数组

下返回
[{a: 2012, b: "abd"}, 
 {a: 2013, b: "cbde"}]

3 个答案:

答案 0 :(得分:1)

谢谢杰夫的回答。使用杰夫的答案解决问题。

function filter(data,txt ) {
  return data.filter(e => {
     const entries = Object.entries(e);
     return entries.some(entry=>entry[1]?entry[1].toString().includes(txt):false);
  });
}

答案 1 :(得分:0)

const search = "ab";

arr.filter(e => {
   const entries = Object.entries(e);
   return entries.some( entry =>
   entry[0].toString().includes(search) || entry[1].toString().includes(search))

})

我还没有检查过,但应该接近您的要求。

答案 2 :(得分:0)

也许您可以通过属性和值找到对象。

您可以使用此功能:

function findObjectByText(arr, property, value) {
  var result = arr.filter(function(x) {
    return x[property] === value;
  });
  return result;
}

用法:

var test = findObjectByText(arr, "a", 1011);
console.log(test);

结果:

enter image description here

类似这样的东西:

(function() {
  var arr = [{
      a: 1011,
      b: "abc"
    },
    {
      a: 2012,
      b: "abd"
    },
    {
      a: 2013,
      b: "cbde"
    },
    {
      a: 2014,
      b: "xyz"
    }
  ];

  function findObjectByText(arr, property, value) {
    var result = arr.filter(function(x) {
      return x[property] === value;
    });
    return result;
  }
  var test = findObjectByText(arr, "a", 1011);
  console.log(test);
}());

更新:使用通用功能。

function search(arr, value) {
  for (var i in arr) {
    for (var j in arr[i]) {
      if (arr[i][j] === value) {
        return arr[i];
      }
    }
  }
  return null;
}

结果:

enter image description here

类似这样的东西:

(function() {
  var arr = [{
      a: 1011,
      b: "abc"
    },
    {
      a: 2012,
      b: "abd"
    },
    {
      a: 2013,
      b: "cbde"
    },
    {
      a: 2014,
      b: "xyz"
    }
  ];


  function search(arr, value) {
    for (var i in arr) {
      for (var j in arr[i]) {
        if (arr[i][j] === value) {
          return arr[i];
        }
      }
    }
    return null;
  }
  var test = search(arr, 1011);
  console.log(test);
}());