【问题标题】:How to find a word in Javascript array?如何在 Javascript 数组中查找单词?
【发布时间】:2018-05-14 06:20:39
【问题描述】:

我的问题是,如何通过一个单词找到所有数组索引?

[
{name: "Jeff Crawford", tel: "57285"},
{name: "Jeff Maier", tel: "52141"},
{name: "Tim Maier", tel: "73246"}
]

如果我搜索“Jeff”,我想得到:

[
{name: "Jeff Crawford", tel: "57285"},
{name: "Jeff Maier", tel: "52141"},
]

【问题讨论】:

  • 你有什么尝试过的吗?
  • 你只想要索引还是元素?
  • 请访问help center,使用tour查看内容和How to Ask。做一些研究,搜索关于SO的相关主题;如果您遇到困难,请发布您的尝试minimal reproducible example,并注明输入和预期输出。

标签: javascript arrays sorting find collect


【解决方案1】:

为了让它更通用,你可以使用一个函数,它接受一个对象数组、想要的键和搜索字符串,稍后将其用作小写字符串。

function find(array, key, value) {
    value = value.toLowerCase();
    return array.filter(o => o[key].toLowerCase().includes(value));
}

var array = [{ name: "Jeff Crawford", tel: "57285" }, { name: "Jeff Maier", tel: "52141" }, { name: "Tim Maier", tel: "73246" }]

console.log(find(array, 'name', 'Jeff'));

【讨论】:

    【解决方案2】:

    使用.filter:

    const input=[{name:"Jeff Crawford",tel:"57285"},{name:"Jeff Maier",tel:"52141"},{name:"Tim Maier",tel:"73246"}]
    const filtered = input.filter(({ name }) => name.startsWith('Jeff'));
    console.log(filtered);

    如果您想检查“Jeff”是否在任何地方,而不仅仅是在开头,请改用.includes

    const input=[{name:"Jeff Crawford",tel:"57285"},{name:"foo-Jeff Maier",tel:"52141"},{name:"Tim Maier",tel:"73246"}]
    const filtered = input.filter(({ name }) => name.includes('Jeff'));
    console.log(filtered);

    这些是 ES6 特性。对于 ES5,请改用 indexOf

    var input=[{name:"Jeff Crawford",tel:"57285"},{name:"foo-Jeff Maier",tel:"52141"},{name:"Tim Maier",tel:"73246"}]
    var filtered = input.filter(function(obj){
      return obj.name.indexOf('Jeff') !== -1;
    });
    console.log(filtered);

    【讨论】:

      【解决方案3】:

      在原始数组上使用Array#map 并返回索引。然后filter outundefined 值:

      const data = [{name:"Jeff Crawford",tel:"57285"},{name:"Jeff Maier",tel:"52141"},{name:"Tim Maier",tel:"73246"}];
      
      const indices = data.map((item, i) => {
          if (item.name.startsWith('Jeff')) {
            return i;
          }
        })
        .filter(item => item !== undefined);
      
      console.log(indices);

      【讨论】:

        【解决方案4】:

        使用数组filter 方法和indexOffilter 将返回一个新的匹配元素数组。在过滤器回调函数中检查indexOf 关键字不是-1 的名称。那就是名字应该包含关键字

        var originalArray = [{
            name: "Jeff Crawford",
            tel: "57285"
          },
          {
            name: "Jeff Maier",
            tel: "52141"
          },
          {
            name: "Tim Maier",
            tel: "73246"
          }
        ]
        
        function getMatchedElem(keyWord) {
          return originalArray.filter(function(item) {
            return item.name.indexOf(keyWord) !== -1
        
          })
        
        }
        
        console.log(getMatchedElem('Jeff'))

        【讨论】:

          猜你喜欢
          • 2021-12-14
          • 2018-12-13
          • 2012-07-07
          • 2016-08-10
          • 1970-01-01
          • 2017-04-10
          • 2020-03-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多