簡體   English   中英

Javascript按文本搜索對象

[英]Javascript search objects by text

我將如何在javascript中編寫一個通用函數來搜索對象數組,從而得到結果。

例如,假設我有一個對象數組。

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

搜索(arr,“ 101”)將在數組下面返回

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

和Search(arr,“ bd”)將在數組下面返回

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

謝謝傑夫的回答。 使用Jeff的答案的解決方案。

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);
  });
}
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))

})

我沒有檢查過,但應該接近您的需求。

也許您可以通過屬性和值找到對象。

您可以使用此功能:

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() { 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;
}

結果:

在此處輸入圖片說明

像這樣:

 (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); }()); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM