【问题标题】:How to find the index of an object in an array如何在数组中查找对象的索引
【发布时间】:2013-05-15 07:20:00
【问题描述】:

我有一个 JSON 字符串:

  var Str="[{ 'label': 'Month'},{ label: 'within'},{ label: 'From'},
         { label: 'Where'},]";

我通过 eval 将其转换为对象:

      var tagString = eval(Str); 

我想在没有循环的情况下获取月份的索引。

有没有更好的方法在不使用循环的情况下获取数组中对象的索引?

提前致谢!

【问题讨论】:

  • 那不是 JSON。但无论如何你都应该使用JSON.parse,而不是eval...
  • 我不这么认为,使用给定的数据结构你需要循环
  • 如果我使用 JSON.parse 它会给出这样的错误 JSON.parse: expected property name or '}'
  • 因为它不是正确的 JSON 格式。它应该都是双引号,我认为尾随逗号也无效。
  • @vdua:“不使用循环”和“不使用迭代”不是同义词 - 内置函数允许您在不使用 forwhile 的情况下表达事物,就像我的回答一样。跨度>

标签: javascript jquery


【解决方案1】:

不要用eval 解析json!使用JSON.parseArray.map 是一个很好的替代循环:

var str = '[{ "label": "Month"}, { "label": "within"}, { "label": "From"}, { "label": "Where"}]';
var data = JSON.parse(str);
var index = data.map(function(d) { return d['label']; }).indexOf('Month')

jsFiddle

【讨论】:

  • 但是您的解决方案是迭代数组。
  • @vdua:是的,这是搜索列表的唯一方法。
  • 没错,我误解了这个问题,并假设他不想迭代数组。我的错。还是谢谢
【解决方案2】:

如果这些都是标签,你可以像这样改变结构,所以它是“标签数组”,在我看来,这会更合适。

var Str = '["Month","within","From","Where"]';

然后用JSON.parse解析它们,或者因为你使用的是jQuery,所以$.parseJSON让它在更多的浏览器上工作:

var labels = JSON.parse(Str);

labels 现在应该是一个数组,您可以使用Array.indexOf

var index = labels.indexOf('Month');

It's ES5 和大多数现代浏览器都支持它。对于较旧的浏览器,you need a polyfill 不幸的是......也使用了循环。

【讨论】:

  • 如果我使用 var index = labels.indexOf('Month');它是返回 -1
  • @amol 我的回答建议你改变数据的结构。
  • @Eric 我无法更改此数据结构,因为我使用的是视觉搜索插件,并且它需要 json 对象,正如我在问题和小提琴中给出的那样
【解决方案3】:

注意:如果您想通过其值获取 JSON 中的特定项目,我遇到了这个答案并考虑分享它。

您可以使用Array.splice()

首先作为@elclanrs 和@Eric 提到使用 JSON.parse();

var Str = '[{ "label": "Month"}, { "label": "within"}, { "label": "From"}, { "label": "Where"}]';

var item = JSON.parse(Str);

item = item.splice({label:"Month"},1);

及其 ES5。

在此处查看 sn-p 代码

var Str = '[{ "label": "Month"}, { "label": "within"}, { "label": "From"}, { "label": "Where"}]';
var item = JSON.parse(Str);

item = item.splice({label:"Month"},1);

console.log(item);

【讨论】:

    【解决方案4】:

    按复杂条件搜索时使用 Array.findIndex()

    Array.findIndex()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      相关资源
      最近更新 更多