使用.each()获取jQuery数组中第一个索引的值

时间:2017-08-31 09:51:50

标签: javascript jquery html arrays

我有一个通过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]   
   });
}

3 个答案:

答案 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;
&#13;
&#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;