Javascript 取消移位后的数组长度错误

Javascript 取消移位后的数组长度错误,javascript,Javascript,这是基本的,所以请原谅我 var localProductPhotos=[]; 此数组按索引而不是按推送填充新产品: localProductPhotos[id]= dic["file"] ; 后来我遇到了一种情况,我使用上面的一行插入值到索引0,1,3,我想将索引3转换为第一个元素(索引0): 问题是,在此特定情况下,editedPhoto=3,数组长度将计为4:localProductPhotos.length=4,而不是3 我猜这是因为它仍然认为索引3不是空的 如何解决此问题?尝试使用

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

var localProductPhotos=[];
此数组按索引而不是按推送填充新产品:

localProductPhotos[id]= dic["file"] ;
后来我遇到了一种情况,我使用上面的一行插入值到索引
0,1,3
,我想索引
3
转换为第一个元素(索引0):

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

我猜这是因为它仍然认为索引3不是空的


如何解决此问题?

尝试使用数据结构来存储localProductPhotos,这是一个对象数组,每个对象都具有
顺序
属性

例如:

let a = [
  {
    order: 1,
    color: "yellow"
  }, {
    order: 0,
    color: "red"
  }, {
    order: 2,
    color: "green"
  }
];
然后需要一个排序函数来传递给数组原型
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'));
或:


事实上,给定您显示的状态和代码,结果是数组长度为6,y处的值根据需要移动到前面。。。也许数组的状态并不像你所说的那样-但是你的代码中没有任何东西会导致数组小于6不管怎样,它开始的长度是6,结束的长度是6-发布一些MCVE,显示其他的但是是的,如果你在索引0,1和3中有值,那么数组的长度是4-即使editedPhoto是0或1,情况也是如此,不仅仅是3个字符一个简单的数组对你的设计是没有用的,因为数据的顺序位置并不重要-你插入它的id是:1,而且它不能保证保持在索引1,因为你移动了东西,所以为什么要使用array@JaromandaX这不一样,这里他们处理的是稀疏数组。要删除这些空插槽,他们可以执行
arr.filter(=>true)
.filter(x=>x!==undefined)
将删除非空插槽谢谢,但我不想删除空闲插槽,我想保留地图(此数组对用户来说是“可见的”),以便他们可以使用它,添加、移动和删除内容。@hkrly请查看我编辑的答案,我希望它会有用:)
aOrderedAsc = a.sort(ord('order'));
aOrderedDesc = a.sort(ord('order', 'desc'));