繁体   English   中英

unshift 后的数组长度是错误的

[英]Array length after unshift is wrong

这是基本的所以请原谅我。

var localProductPhotos=[];

这个数组通过索引而不是push填充新产品:

localProductPhotos[id]= dic["file"] ;

后来我有一个情况,其中i插入件使用上述行索引0,1,3 ,和我想移位索引3是第一个元素(索引0):

  localProductPhotos.unshift(localProductPhotos.splice(editedPhoto, 1)[0]);

问题是,在这种特定情况下, editedPhoto=3数组长度将计为 4localProductPhotos.length = 4 ,而不是 3。

我想这是因为它仍然将索引 3 计算为不为 null ?

如何解决这个问题?

尝试使用数据结构来存储您的 localProductPhotos,这是一个对象数组,每个对象都有一个order属性。

例如:

let a = [
  {
    order: 1,
    color: "yellow"
  }, {
    order: 0,
    color: "red"
  }, {
    order: 2,
    color: "green"
  }
];

然后你需要一个排序函数来传递给 Array 原型order方法。

const ord = (key, order = 'asc') => {
  return (a, b) => {
    if(!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) {
      return null; //or any error code.
    }

    let r = (a[key] > b[key]) ? 1 : -1;

    return (order == 'desc') ? (r * -1) : r;
  }
}

因此,当用户更改元素的顺序时,您只需修改对象中 'order' 属性的值。

然后按顺序打印它们,使用类似的东西:

aOrderedAsc = a.sort(ord('order'));

或者:

aOrderedDesc = a.sort(ord('order', 'desc'));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM