我有一个通过Ajax返回的JSON数组,看起来像:
"stuff": [["2","66%"], ["3","42%"],...
问题我想将该数组中每个元素的零索引与循环外部的变量匹配,如果它匹配,我想返回其旁边的百分比。
我不知道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]
});
}
首先,一些术语。您拥有的数据结构是具有多个属性的对象。它与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>
尝试此
var percentage = stuffarr.find(function (value) {
if(value[0] == stuffID)
return value[1];
})[1];
您使用的返回语句返回.EAK(..)函数内的函数(..)的结果,而不是.east(..)函数的返回值。有效的返回值是布尔值,它"告诉" .east(..)函数是否应该继续。而是使用以下语法:
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;