【问题标题】:Javascript Find string in a table like arrayJavascript在类似数组的表中查找字符串
【发布时间】:2014-02-21 14:53:08
【问题描述】:

这个问题有两个部分:首先,我想创建一个像表格一样工作的数组。它将有两列 ID(Game-IdGame-Name)。我一直在做这样的事情:

var game_list = 
  [
    {id:1, name:'Vampires hunter'},
    {id:2, name:'Christmas vampires'},  
    {id:3, name:'Fruit hunter'},
    {id:4, name:'The fruitis'},
    {id:5, name:'james bond'},
    {id:6, name:'Vampires hunter'},
    {id:7, name:'Vampires avalon'},
    {id:8, name:'Vampires warrior'},
    {id:9, name:'Vampires hunter'}, 
    {id:10, name:'Vampires hunter'},
  ];

但是我不能访问这种数组/对象中的元素,甚至不能访问元素的document.write

我需要创建一个函数来搜索该数组中的特定字符串。该函数将有 2 个参数(字符串和数组),它会为我们提供一个包含与该字符串匹配的游戏名称和 id 的元素数组。

【问题讨论】:

  • 在返回语句中使用 Array.prototype.filter 和 obj.name.indexOf(search)。

标签: javascript arrays string search


【解决方案1】:

使用filter:

function filter(arr, string) {
  return arr.filter(function (el) {
    return el.name === string;
  });
}

filter(game_list, 'Vampires avalon'); // [{ id=7, name="Vampires avalon"}]

Demo

如果你想变得真正聪明,添加一些正则表达式来匹配名称中任意位置的字符串:

function filter(arr, string) {
  var regex = new RegExp('.*' + string + '.*');
  return arr.filter(function (el) {
    return regex.exec(el.name);
  });
}

filter(game_list, 'hunter');

这会给你这个:

[{"id":1,"name":"Vampires hunter"},{"id":3,"name":"Fruit hunter"},{"id":6,"name":"Vampires hunter"},{"id":9,"name":"Vampires hunter"},{"id":10,"name":"Vampires hunter"}]

Demo

【讨论】:

  • 很好,我比我更喜欢这个!
  • 感谢@Andy,它不适用于此:var game_list = { 1: {name:'Vampires Hunter', description:'世界上最好的吸血鬼游戏'},2: {name: '圣诞吸血鬼', description:'世界上最好的吸血鬼游戏'},3: {name:'水果猎人', description:'世界上最好的吸血鬼游戏'},4: {name:'Thefruitis' , description:'世界上最好的吸血鬼游戏'}, 5: {name:'詹姆斯邦德', description:'世界上最好的吸血鬼游戏'} };我收到此错误:return arr.filter(function (el) {
  • See here for more information on how to output stuff on the page.。尽量不要使用document.write,这被认为是不好的做法。
  • @Andy 很抱歉打扰您,但我试图使其与二维关联数组的结构(在前面的评论中)一起工作,非常感谢。
  • I've updated the fiddle。还有一个名为getData 的额外函数,它采用您的新结构并将其更改为代码可以理解的结构。
【解决方案2】:

一个简单的循环和检查就可以了:

function checkArray(name) {
    var arr = [];
    for (var i = 0; i < game_list.length; i++) {
        if (game_list[i].name == name)
            arr.push(game_list[i])
    }
    return arr;
}

将传入的name与每个对象的name进行比较,并返回匹配对象的数组。如果您只想要包含传入字符串的名称,请使用indexOf 并检查-1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 2011-03-20
    • 2022-12-10
    • 2020-06-19
    • 1970-01-01
    • 2018-08-18
    相关资源
    最近更新 更多