我有这个代码,它改变了原始数组arr,即使我将它复制到一个名为copy的变量。 数据(arr)由代码报告提供
cutIt(["codewars","javascript","java"])
function cutIt(arr){
//coding here...
//step 1 go through array and find the shortest
// sort string by length
// make copy of arr not to affect it
let copy = arr;
console.log(copy);
//[ 'codewars', 'javascript', 'java' ]
let sorted = copy.sort(function (a,b) {
return a.length - b.length;
})
console.log(arr);
//[ 'java', 'codewars', 'javascript' ]
}
我没有在代码中明确更改数组arr,但输出显示它已被更改?我想通过制作它的副本并对副本进行排序它不会影响arr?
答案 0 :(得分:2)
// make copy of arr not to affect it
let copy = arr;
实际上并非如此;你刚刚创建了第二个变量引用了同一个数组实例。
您可以致电arr.slice()
来创建实际副本。
答案 1 :(得分:0)
Array不是原始数据类型。充其量它们是物体的变体。对象通过引用传递,而不是值得注意的值。也就是说,如果这是意图,有几种方法可以深入克隆数组。
1) Vanilla JS:
int count = 0;
if (count == 0) {
NextButton.setEnabled(false);
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.otherButtons:
count++;
NextButton.setEnabled(true);
Toast.makeText(this, "Button Disabled", Toast.LENGTH_LONG).show();
break;
case R.id.nextButton:
//Move the user to the next question
break;
}
}
2) Lodash:
E.g
const newArraryCopy = <Your array>.slice();