如何在JavaScript中将一个数组元素移动到另一个数组中?

3

我的代码类似于

var shapes1 = [  r.image("node.gif",190, 100, 47, 45)];
var shapes2 =[];
for (var i = 0, ii = shapes1.length; i < ii; i++) {
    shapes1[i].mousedown(function(e){
        var temp=this.clone();
        shapes1.push(temp);
        //now I want to remove "this" from shapes1
        //and put it into shape2
        //HOW??
        isDrag=true;
        e.preventDefault();
    });
}

也许这样做不太对?我应该使用类(class)来代替,但是那不是用于DOM元素吗?

也许你应该描述一下你想要做什么。 - Gumbo
2个回答

3
我发现像这样的东西非常方便:

function removeIf(arr, predicate) {

    for (var i = 0; i < arr.length; i++) {
        if (predicate(arr[i])) {
            arr.splice(i--, 1);
        }
    }
}

那么,接下来:
var shapes1 = [  r.image("node.gif",190, 100, 47, 45)];
var shapes2 =[];
for (var i = 0, ii = shapes1.length; i < ii; i++) {
    shapes1[i].mousedown(function(e){
        var temp=this.clone();
        shapes1.push(temp);

        removeIf(shapes1, function (item) { return item === this; });

        shapes2.push(this);

        isDrag=true;
        e.preventDefault();
    });
}

没问题。将一个函数传递给测试每个项的方法的好处是,您可以使用它根据任何您想要的“查询”删除多个项,例如,而不是 item === this,它可以是 item.firstName.length > item.lastName.length,以删除任何名字比姓氏长的项(好吧,这只是一个愚蠢的例子,但您可以看到它有多么强大)。 - Daniel Earwicker

1
使用splice(index,range)从数组中删除项目。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接