[英]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
,数组长度将计为 4 : localProductPhotos.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.