我有一个通过ajax返回的JSON数组,如下所示:
"stuff": [["2","66%"], ["3","42%"],...
问题 我想将此数组中每个元素的第0个索引与循环外的变量匹配,如果匹配,我想返回它旁边的百分比。
我不知道jQuery中的语法。请查看下面的代码,看看是否正确:
var percentage = 0;
var stuffarr = jsonobj['stuff'];
var stuffID = jsonobj['stuff_id']
if (!stuffID || 0 === stuffID.length){
$("#stuff-element").html("--");
}
else {
var percentage = $.each(stuffarr, function (index, value) {
if(value[0] == stuffID)
return value[1]
});
}
答案 0 :(得分:2)
首先,一些术语。您拥有的数据结构是一个包含多个属性的Object。它在反序列化后与JSON无关。
关于您的问题,不需要jQuery,因为您可以使用find()
按stuffID
变量的值查找数组中的项目。试试这个:
var obj = {
"stuff": [
["2", "66%"],
["3", "42%"]
],
"stuff_id": "3"
}
var percentage = 0;
var stuffArr = obj['stuff'];
var stuffId = obj['stuff_id']
if (!stuffId || 0 === stuffId.length) {
$("#stuff-element").html("--");
} else {
percentage = stuffArr.find(function(el) {
return el[0] == stuffId;
})[1];
}
console.log(percentage);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
答案 1 :(得分:1)
试试这个
var percentage = stuffarr.find(function (value) {
if(value[0] == stuffID)
return value[1];
})[1];
答案 2 :(得分:0)
您使用的return语句返回.each(..)函数内函数(..)的结果,而不是.each(..)函数的返回值。 有效的返回值是boolean,它“告诉”.each(..)函数是否应该继续。而是使用以下语法:
var ret = '';
$(arr).each(function () {
var curr = $(this);
//console.log(curr);
if(curr[0] == stuffID){
//console.log('>>found: ' + curr[1]);
ret = curr[1];
//if found -> break loop
return false;
}
});
评论:您应该考虑使用对象而不是使用内部数组数据结构,这是一个更“正确”的数据结构:
// "stuff": [{"id":"2","percent":"66%"}, {"id":"3","percent":"42%"},...
var ret = '';
$(arr).each(function () {
var curr = this;
//console.log(curr.id);
if(curr.id == stuffID){
//console.log('>>found: ' + curr.percent);
ret = curr.percent;
//if found -> break loop
return false;
}
});
@LiverpoolOwen方法干净而且很好,如果你想将它与对象方法结合使用,请执行以下操作:
arr.find(function (value) {
if(value.id == stuffID)
return value;
}).percent;