如何从 0 开始重新索引对象

how to reindex object start from 0

本文关键字:索引 对象 新索引 开始      更新时间:2023-09-26

我有一个来自以下代码的对象输出如何在 js 中设置从 0 开始的索引?

Object
  3: Object
     id: 34
     type: 0

var obj = {};
var edited = false;
for (var i = 0; i < $(".list").length; i++) {
  var data_id = parseInt($(".list").eq(i).attr('data-id'));
  var data_type = parseInt($(".list").eq(i).attr('data-type'));
  if ((data_type != 0)) {
    edited = true;
  } else {
    edited = false;
  }
  if (edited == true) {
    obj[i] = {};
    obj[i]['id'] = data_id;
    obj[i]['type'] = data_type;
  }
}
console.log(obj);

需要更多的jQuery?

var arr = $(".list").filter(function() {
              return $(this).data('type') != 0;
          }).map(function() {
              return { id : $(this).data('id'), type : $(this).data('type') };
          }).get();

小提琴

实际上,如果您想从 0 开始,请使用另一个变量而不是"i"(当您将其用作索引时

,我认为它是 3)。
var obj = {};
var edited = false;
var obj_idx = 0;
for (var i = 0; i < $(".list").length; i++) {
  var data_id = parseInt($(".list").eq(i).attr('data-id'));
  var data_type = parseInt($(".list").eq(i).attr('data-type'));
  if ((data_type != 0)) {
    edited = true;
  } else {
    edited = false;
  }
  if (edited == true) {
    obj[obj_idx] = {};
    obj[obj_idx]['id'] = data_id;
    obj[obj_idx]['type'] = data_type;
    obj_idx += 1;
  }
}
console.log(obj);

我认为这次 obj 将是这样的:

Object
  0: Object
     id: 34
     type: 0

你可以通过Array.prototype.push.call将对象伪装成数组,这样你也可以获得副作用:obj.length。 有点忍者,有点优雅:]

var obj = {};
var edited = false;
for (var i = 0; i < $(".list").length; i++) {
  var data_id = parseInt($(".list").eq(i).attr('data-id'));
  var data_type = parseInt($(".list").eq(i).attr('data-type'));
  if ((data_type != 0)) {
    edited = true;
  } else {
    edited = false;
  }
  if (edited == true) {
    Array.prototype.push.call(obj, {id: data_id, type: data_type});
  }
}

我将给出一个非常简单易读的例子。假设您有一个具有以下结构的对象:

Object
  0: Object
     key: 'some-key'
     value: 'some-value'
  1: Object
     ...

然后你可能想从中删除一个条目并重新索引整个事情,这就是我的做法:

// obj is Object from above
const reIndexed = Object.entries(obj).map((element, index) => {
  if (parseInt(element[0] != index) {
    element[0] = index.toString();
  }
  return element;
});