我有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);
}
});
答案 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()
并在找到元素时将累加器值设置为该元素的索引。那么将返回找到的最后一个元素的索引。
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;
答案 2 :(得分:1)
实际上,您不需要使用jQuery
来解决它。
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;