使用JQUERY

时间:2017-04-27 07:47:54

标签: javascript jquery

我有一个定义的对象“数据”:

MYLIST
    61:
        ALREADY_EXIST: 1
        ARCHIVE: 0
        CODE_UNIT: "F.5"
        GROUP_TYPE: "Group"
        ID: 61
        SG_CODE: "ABCD00"
    62:
        ALREADY_EXIST: 0
        ARCHIVE: 0
        CODE_UNIT: "D.1"
        GROUP_TYPE: "Sub-Group"
        ID: 62
        SG_CODE: "ABCD11"
    86:
        ALREADY_EXIST: 1
        ARCHIVE: 0
        CODE_UNIT: "B.1"
        GROUP_TYPE: "Group"
        ID: 61
        SG_CODE: "ABC235"
    99:
        ALREADY_EXIST: 0
        ARCHIVE: 0
        CODE_UNIT: "A.2"
        GROUP_TYPE: "Group"
        ID: 62
        SG_CODE: "ABCD11"
SUBJECT_CODE_NUMBER: 4

我正在尝试解析此对象,以便在previous和nex值之后显示值。

我想检索变量中的下一个和上一个元素,我该怎么做?

$.each(data.MYLIST,function(k,v){       
    alert(v); //OK
    console.log(data.MYLIST[k].SG_CODE); //OK
    console.log(????); // FOR THE NEXT VALUE
    console.log(????); // FOR THE PREVIOUS VALUE                        
});

在Mylist中,k不是连续值。 k + 1不是强制k的以下值。例如,您有项目62,项目后面是86。

因此我不能使用:

var next = data.EXPERT_GROUP[k+1].SG_CODE  
var previous= data.EXPERT_GROUP[k-1].SG_CODE 

在这种情况下,你知道获得下一个值和前一个值的方法吗? 提前感谢您的帮助。

的Seb

3 个答案:

答案 0 :(得分:0)

使用jQuery $.each,您可以使用函数的第一个参数直接访问索引。 假设你的指数不能为负。

 

var previous = -1;
$.each(data.MYLIST,function(k,v){
    alert(v); //OK

    if(previous != -1){
      console.log(data.MYLIST[previous].SG_CODE); // FOR THE PREVIOUS VALUE
    }
    console.log(data.MYLIST[k].SG_CODE); //OK
    previous = k;                     
});

如果您的索引没有定期增加,请不要认为您可以访问下一个值。

答案 1 :(得分:0)

由于您的数组在连续索引位置没有定义的值,您可以定义一个方法,如:

function seekNext(a, index) { 
   for(var i = index; i<a.length; i++){
     if(a[i]){ 
       return a[i] }
     }
};

您可以将此方法调用为seekNext(data.MYLIST, k)

同样可以编写seekPrev实现。 如果数组的索引值是连续的,则可以通过递增和递减当前数组循环索引值来访问上一个和下一个值。

答案 2 :(得分:-2)

编辑28/4/17

我覆盖了$.each方法。

<强>码

a= {"a":{"c":"1"},"b":{"c":"2"},"c":{"c":"3"},"d":{"c":"4"},"e":{"c":"7"},"f":{"c":"9"}};

$.each = function (obj, callback) {
  var length, i;
  this.preAndNext = 0,
    this.previous = { "index": null, "data": null },
    this.now = { "index": null, "data": null };
  if (obj.length) {
    length = obj.length;
    for (; i < length; i++) {
      if (callback.call(obj[i], i, obj[i]) === false) { break; }
    }
  } else {
    //that's your object need it.
    for (i in obj) {
      if (this.preAndNext) {
        if (callback.call(obj[i], this.now.index, this.previous.data, this.now.data, obj[i]) === false) { break; }
      }
      this.previous = (this.now.data) ? this.now : this.previous;
      this.now = { "index": i, "data": obj[i] };
      this.preAndNext = true;
    }
    callback.call(obj[i], i, (this.now.data ? this.previous.data : null), (this.now.data || this.previous.data), null);
  }
  return obj;
}

$.each(a,function(i,pre,now,next){
  //i:index
  //pre:previous object;
  //now:now state object;
  //next: the next object;
  console.log(i,pre,now,next);
});

在调用jquery之后添加代码。如果你的循环遇到第一个或最后一个元素被渲染null。(即第一个循环pre = null

希望能帮到你。