Javascript 数组文本中是否有动态索引的表示法?

Javascript 数组文本中是否有动态索引的表示法?,javascript,ecmascript-6,Javascript,Ecmascript 6,声明对象文字时,可以像这样声明动态键: constfoo='foo'; 常量对象={ [foo]:“酒吧” } 控制台日志(obj)可以使用空数组作为目标,使用给定数组和具有索引属性的对象 const arr=[1,2,3]; const modifiedClone=Object.assign([],arr,{[arr.length-1]:4}); console.log(modifiedClone)当前无法使用数组文字和排列语法来请求。这是因为与对象文字不同,数组不是由特定索引定义的,而是

声明对象文字时,可以像这样声明动态键:

constfoo='foo';
常量对象={
[foo]:“酒吧”
}
控制台日志(obj)可以使用空数组作为目标,使用给定数组和具有索引属性的对象

const arr=[1,2,3];
const modifiedClone=Object.assign([],arr,{[arr.length-1]:4});

console.log(modifiedClone)当前无法使用数组文字和排列语法来请求。这是因为与对象文字不同,数组不是由特定索引定义的,而是由成为其成员的序列定义的

最多,您可以使用省略将索引保留为空,例如,
[1,3]
将生成
1,3
,但您仍然必须明确说明它,您不能“跳过”,这意味着创建只有第一个和第十个成员的数组变得非常困难。绝对不建议将more作为数组文字

话虽如此,数组的扩展语法
..
从中获取值,因此
[…arr]
类似于:

let result=[];
让它=arr[Symbol.iterator]();
让next=it.next();
而(!下一步。完成)){
结果推送(下一个值);
next=it.next();
}
有了这些知识,我们可以利用并制作一些简单的通用辅助生成器来转换iterable并传播其结果。比如说

从iterable获取除最后一项以外的所有内容:

/**
* 
*@发电机
*@param{Iterable}
*@从iterable中产生{*}个值,但最后一个值除外
*/
函数*初始值(iterable){
const it=iterable[Symbol.iterator]();
让last=it.next();
让next=it.next();
而(!next.done){
产出价值;
最后一个=下一个;
next=it.next();
}
}
常数arr=[1,2,3];
常量modifiedClone=[…初始值(arr),4];

console.log(modifiedClone)
对于数组文本,只能声明包含其成员的数组。你不能真正做到与对象排列相同,因为基本上数组语法不是这样工作的——你不能根据成员的位置定义它们,你只需要定义转换成数组的序列;修改后的克隆[arr.length-1]=4
?@Bergi显然是的,但我的问题是关于实现这一点的一条指令如果你想让它成为一个表达式,你可以把一切都放到一个生命中:-)有一个建议。有了这一点,就有可能变得更灵活和/或更灵活。如果你想传播和覆盖,你可以利用生成器。这是否值得取决于它,但它是一种选择。