【问题标题】:How to search a multidimensional array for value?如何在多维数组中搜索值?
【发布时间】:2016-12-12 15:17:57
【问题描述】:

我有一个想要搜索的数组。我找到了一个使用 $,map 的方法,但我无法正常工作。

我的数组是这样生成的:(使用从 MySQL 获取数据的 PHP 循环)

clientList.push = [{'ID' : '1', 'FullName' : 'Company1'}]
clientList.push = [{'ID' : '2', 'FullName' : 'Company2'}]
clientList.push = [{'ID' : '3', 'FullName' : 'Company3'}]

我正在尝试使用以下内容返回 ID = 2 的“FullName”值。这是另一个问题的示例。

var found = $.map(clientList, function(item) {
    if (item.ID.indexOf('2') >= 0) {
        return item;
    }
});

if (found.length > 0) {
    alert(found[0].FullName);
}

但是,这不会返回任何内容,并且我没有收到任何 Javascript 错误。

我做错了什么?

【问题讨论】:

  • “我的数组是这样生成的” 我非常怀疑,反正不是在 JavaScript 中。如果确实如此,那么这就是您的问题:分配给 push 属性不会添加到数组中。
  • @T.J.Crowder 你能解释一下吗?这就是我生成数组的方式。
  • @T.J.Crowder 感谢您的澄清。我认为 Push 向数组中添加了新项目。
  • indexOf('2') 非常值得怀疑。它将匹配 2 和 20。检查是否相等。 push 将是一个函数,将元素作为参数。当您使用它时,您似乎会尝试将 push 方法替换为 json 内容。
  • @T.J.Crowder 我的目标是将 MySQL 表变成可以搜索的 Jquery 数组。

标签: jquery arrays multidimensional-array


【解决方案1】:

这是不正确的:

clientList.push = [{'ID' : '1', 'FullName' : 'Company1'}]
clientList.push = [{'ID' : '2', 'FullName' : 'Company2'}]
clientList.push = [{'ID' : '3', 'FullName' : 'Company3'}]

您正在将数组分配给 push 属性,这是数组的一个方法。

如果您有一个从clientList 引用的数组,那么要将其添加到您调用 push(没有=,并注意( ... );):

clientList.push([{'ID' : '1', 'FullName' : 'Company1'}]);
clientList.push([{'ID' : '2', 'FullName' : 'Company2'}]);
clientList.push([{'ID' : '3', 'FullName' : 'Company3'}]);

另外,$.map 代码不起作用,clientList 中的条目没有ID 属性(它们是数组;它们内部的对象有@987654331 @ 属性)。

你在评论中说过:

我的目标是将 MySQL 表转储到可以搜索的 Jquery 数组中

那么你想要一个对象数组,只是一个对象数组:

var clientList = []
// Presumably simulating the results of an ajax query
clientList.push({'ID' : '1', 'FullName' : 'Company1'});
clientList.push({'ID' : '2', 'FullName' : 'Company2'});
clientList.push({'ID' : '3', 'FullName' : 'Company3'});

要在此处找到带有 ID == 2 的条目 int,您可以使用 Array#find(ES2015 中的新功能,但可填充/填充):

var item = clientList.find(function(item) {
    return item.ID == "2";
});

活生生的例子:

var clientList = []
// Presumably simulating the results of an ajax query
clientList.push({'ID': '1', 'FullName': 'Company1'});
clientList.push({'ID': '2', 'FullName': 'Company2'});
clientList.push({'ID': '3', 'FullName': 'Company3'});

var item = clientList.find(function(item) {
  return item.ID == "2";
});
console.log(item);

【讨论】:

  • 非常感谢,很高兴这很简单,现在完全有意义。 (今天很不舒服,在上线前有最后一分钟的客户更改请求......)
  • @user2924019:很抱歉听到这个消息。 :-( 希望你很快好起来。我已经用我认为你想做的事情更新了上面的内容。
  • 非常感谢,现在一切都按计划进行。 (我和客户之间有三个人,他们都说不同的母语,这无济于事。更不用说我什至不再为公司工作了!至少到达那里。再次欢呼。
【解决方案2】:

push() 方法将新项目添加到 array 的末尾。使用这个fiddle

var clientList=[];
clientList.push({'ID' : '1', 'FullName' : 'Company1'})
clientList.push({'ID' : '2', 'FullName' : 'Company2'})
clientList.push({'ID' : '3', 'FullName' : 'Company3'})

var found = $.map(clientList, function(item,index) {
    if (item.ID == 2) {
        return item;
    }
});

if (found.length > 0) {
    alert(found[0].FullName);
}

【讨论】:

  • 代码转储不是有用的答案。说出你做了什么,以及为什么。另外,map 在这里是错误的工具。
猜你喜欢
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
  • 2017-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多