JSON / Javascript:返回包含特定属性的数组对象的INDEX

时间:2015-08-02 14:22:17

标签: javascript arrays json

给定一个JSON对象,如:

{
  "something": {
    "terms": [
      {
        "span": [
          15,
          16
        ],
        "value": ":",
        "label": "separator"
      },
      {
        "span": [
          16,
          20
        ],
        "value": "12.5",
        "label": "number"
      }
    ],
    "span": [
      15,
      20
    ],
    "weight": 0.005,
    "value": ":12.5"
  }
 }

我问了一个关于解析对象的问题,其中label:number here: JSON/Javascript: return which array object contains a certain property

我在那里得到了足够的答案(使用filter()),但现在需要知道对象的原始索引。

issue似乎有答案,但我对javascript的了解不足以将其翻译成对我的特定问题有用的东西。

以下代码成功返回该对象。现在我需要修改它以返回对象的原始索引:

var numberValue, list = parsed.something.terms.filter(function(a){
  return a.label==='number';
});
numberValue = list.length ? list[0].value : -1;

这需要是一个纯粹的JavaScript解决方案,没有外部库等。

2 个答案:

答案 0 :(得分:3)

我不认为你可以修改过滤器解决方案,因为你已经丢失了索引。

您链接的解决方案使用角度外部库。

所以这是一个纯粹的JS解决方案:

var numberValue = parsed.something.terms
    .map(function(d){ return d['label']; })
    .indexOf('number');

Array.prototype.indexOf()

Array.prototype.map()

答案 1 :(得分:1)

使用forEach并收集满足a.label==='number'谓词的对象的索引:

var target = parsed.something.terms;
var list = [];
target.forEach(function(element, index){
    if (element.label==='number') {
        list.push(index)
    };
});
var numberValue = list.length ? target[list[0]].value : -1;

console.log(list); // [1]
console.log(numberValue); // 12.5