如何在数组中查找对象的索引

时间:2013-05-15 07:20:00

标签: javascript jquery

我有一个JSON字符串:

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

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

      var tagString = eval(Str); 

我想获得没有循环的月份索引。

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

提前致谢!

3 个答案:

答案 0 :(得分:25)

请勿使用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

答案 1 :(得分:14)

如果这些都是标签,你可以改变这样的结构,所以它是“一系列标签”,在我看来,这样更合适。

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 ...也使用循环。

答案 2 :(得分:2)

注意:如果你想通过它的值获得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。

请参阅此处的代码段



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

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

console.log(item);