使用jquery在json中获取相同类型的最后一个obj值

时间:2017-03-03 14:49:04

标签: javascript jquery json

我有JSON数据,我需要来自相同类型obj值的最后一个obj值。

我想获取Foo值栏的最后一个索引

我知道如何获取json数组的最后一个索引。

// Send AJAX request.
$.ajax({
    type: "POST",
    url: "/nodeRoute",
    data: formData,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(data) {
        console.log('Success');
    },
    failure: function(err) {
        console.log("Failure", err);
    }
});
var data = [{
    "foo": "bar"
  },
  {
    "foo": "bar-1"
  },
  {
    "foo": "bar-2"
  },
  {
    "foo": "bar-1"
  },
  {
    "foo": "bar"
  },
  {
    "foo": "bar-1"
  },

]



$.each(data, function(key, val) {
  if (val.foo == "bar") {
    console.log(key);
  }
});

3 个答案:

答案 0 :(得分:2)

不需要jQuery,只需反向循环:

假设您想要的元素接近结尾。如果没有,那么给出的任何缩小或地图答案都可能不会慢得多

var data = [
  {"foo": "bar"},
  {"foo": "bar-1"},
  {"foo": "bar-2"},
  {"foo": "bar-1"},
  {"foo": "bar"},
  {"foo": "bar-1"} // no comma on the last
]


// Find the last `bar`

for (var i=data.length-1;i>=0;i--) {
  if (data[i].foo == "bar") {
    console.log('Last of Foo Bar is ' +i);
    break;
  }
}

// Find the last `bar` AND the last bar-1
var bars = { "bar":-1, "bar-1":-1, "done":0 }, numBars = 2;
for (var i=data.length-1;bars["done"]<numBars && i>=0;i--) {
  if (bars[data[i].foo]==-1) {
    bars[data[i].foo] = i;
    bars["done"]++;
  }
}
console.log(JSON.stringify(bars));

答案 1 :(得分:2)

您可以使用reduce()并在找到元素时将累加器值设置为该元素的索引。那么将返回找到的最后一个元素的索引。

&#13;
&#13;
var data = [{"foo":"bar"},{"foo":"bar-1"},{"foo":"bar-2"},{"foo":"bar-1"},{"foo":"bar"},{"foo":"bar-1"}]

var lastIndex = data.reduce(function(r, e, i) {
  if(e.foo == 'bar') r = i
  return r;
}, null)

console.log(lastIndex)
&#13;
&#13;
&#13;

答案 2 :(得分:1)

实际上,您不需要使用jQuery来解决它。

&#13;
&#13;
var data = [{foo:"bar"},{foo:"bar-1"},{foo:"bar-2"},{foo:"bar-1"},{foo:"bar"},{foo:"bar-1"}],
    indexes = [];
    data.forEach((v,i) => v.foo == 'bar' ? indexes.push(i) : v);

console.log(`Index of last 'bar' key is ${indexes[indexes.length-1]}`);
&#13;
&#13;
&#13;