Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否在不使用拼接的情况下将现有阵列的元素复制到新阵列?_Javascript_Arrays_Shallow Copy - Fatal编程技术网

Javascript 是否在不使用拼接的情况下将现有阵列的元素复制到新阵列?

Javascript 是否在不使用拼接的情况下将现有阵列的元素复制到新阵列?,javascript,arrays,shallow-copy,Javascript,Arrays,Shallow Copy,我目前正在为大学做一些功课。我正在尝试将旧数组的单个值复制到新数组,然后将旧数组值设置为0。显然,如果我只是将值赋给新数组,然后更改旧数组的值,它也会覆盖新数组 我不允许使用函数splice() 这是我的密码: function rankedScores(web, pattern) { var v = urlScores(web, pattern); var sorted = []; var maxIndex = 0; while (sorted.length &

我目前正在为大学做一些功课。我正在尝试将旧数组的单个值复制到新数组,然后将旧数组值设置为0。显然,如果我只是将值赋给新数组,然后更改旧数组的值,它也会覆盖新数组

我不允许使用函数splice()

这是我的密码:

function rankedScores(web, pattern) {
    var v = urlScores(web, pattern);
    var sorted = [];
    var maxIndex = 0;
    while (sorted.length < v.length) {
        for (var i = 0; i < v.length; i += 1) {

            if (v[i].score > v[maxIndex].score) {
                maxIndex = i
            }
        }
        sorted[sorted.length] = v[maxIndex];
        v[maxIndex].score = 0;

        maxIndex = 0;
    }
    alert(sorted[0].url + '   ' + sorted[0].score)
    alert(sorted[1].url + '   ' + sorted[1].score)
    alert(sorted[2].url + '   ' + sorted[2].score)
}
函数rankedScores(web、模式){
var v=urlScores(网络、模式);
var排序=[];
var-maxIndex=0;
while(排序长度v[maxIndex].score){
maxIndex=i
}
}
排序的[sorted.length]=v[maxIndex];
v[maxIndex]。分数=0;
maxIndex=0;
}
警报(已排序[0]。url+''+已排序[0]。分数)
警报(已排序[1]。url+''+已排序[1]。分数)
警报(已排序[2]。url+''+已排序[2]。分数)
}
如果我这样做,它会返回正确的URL值,但所有的分数值都是0

关于如何阻止数组指向同一内存位置,有什么想法吗

我尝试使用for循环,因为我看到这是一个浅拷贝,但它不起作用

干杯。

替换:

sorted[sorted.length] = v[maxIndex];
v[maxIndex].score = 0;
与:


当然,您还没有说明对象的深度-我假设它们是简单的
key:value
贴图,但这应该足以引导您朝正确的方向前进。

一个选项是只对分数求反,然后将其设置回二次循环。另一种方法是将整个数组项设置为null,并在进行比较之前进行检查…谢谢!!他很有魅力。我曾尝试使用一个循环来替换这个值,但是我没有考虑使用一个分离的变量来存储记录。非常感谢!!
// ...

var clone = {};
for(var i in v[maxIndex])
    clone[i] = v[maxIndex][i];
sorted[sorted.length] = clone;

v[maxIndex].score = 0;

// ...