我试图反转一个对象中的元素数组。
colorKey = {
"2m":["#ffffff","#000000"]
}
colorKey["2mi"] = colorKey["2m"];
Array.reverse(colorKey["2mi"])
这不起作用并且返回colorKey [" 2mi"]与colorKey [" 2m"]相同。当我在浏览器的开发者控制台中运行相同的命令时,它会成功反转。问题在哪里?
答案 0 :(得分:0)
这不是名为reverse
的数组的静态方法。 reverse
是Array对象的实例方法(Array.prototype.reverse
),因此Array的实例必须是调用者。
这解决了您的问题:
colorKey = {
"2m":["#ffffff","#000000"]
}
colorKey["2mi"] = colorKey["2m"];
colorKey["2mi"].reverse();
输出: [“#000000”,“#fffffff”]
答案 1 :(得分:0)
为数组调用reverse()会使其变异(反向到位 - 不创建新数组)。显然,你想要的是拥有数组的反转副本。基本上,创建一个具有相同值的新数组,然后将其反转。
var a = [1,2],b; b = a.slice(0).reverse();
Slice创建一个具有相同元素的新数组(但请记住它不是克隆元素)。
答案 2 :(得分:0)
@Rajat Aggarwal
您要求的是以相反的顺序克隆您之前的数组。
它唯一的微不足道的部分就是扭转它。因为没有办法克隆对象和数组,也没有一种通用方法可以写下来作为一种普遍使用它的函数。
您提供的样本中的特定数组可以轻松克隆,因为它是平的并且只包含基元。但是它的解决方案将与提供的样本数组完全一样具体。
此任务的特定解决方案是使用以逗号分隔的连续值字符串并将其转换为其对应原始值的特定数组。:
var colors = "#ffffff,#000000";
var colorKey = {
"2m":colors.split(","),
"2mi":colors.split(",").reverse()
}
会产生一个:
>> colorKey
{
2m : #ffffff,#000000,
2mi : #000000,#ffffff
}