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

时间:2013-11-10 14:48:51

标签: javascript arrays shallow-copy

我目前正在为大学做一些课程。我试图将旧数组的单个值复制到新数组,然后将旧数组值设置为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)
}

如果我这样做,它会返回正确的URL值,但所有得分值都为0.

关于如何阻止数组指向同一内存位置的任何想法?

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

干杯。

1 个答案:

答案 0 :(得分:1)

替换:

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

使用:

// ...

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

v[maxIndex].score = 0;

// ...

当然,你没有说明你的物体有多深 - 我认为它们是简单的key:value地图,但这足以引导你朝着正确的方向前进。