简体   繁体   English

Javascript splice方法从两个数组中删除值

[英]Javascript splice method remove values from two arrays

Javascript (using jQuery): Javascript(使用jQuery):

var paragraphs = [
    ['This is my first paragraph content of the first array', 'This is my second paragraph content of the first array', 'This is my third paragraph content of the first array'],
    ['This is my first paragraph content of the second array', 'This is my second paragraph content of the second array', 'This is my third paragraph content of the second array']
],
text_box_value,
unused_paragraphs = null;

$(document).ready(function(){
    $('input#text_box').keyup(function(){
        text_box_value = $(this).val(); 
    });

    $('input#submit_button').click(function(){
        if(unused_paragraphs === null) {
            unused_paragraphs = paragraphs; 
        }

        for(var i = 0; i < unused_paragraphs.length; i++) {
            if(unused_paragraphs[i].length == 0)
                unused_paragraphs[i] = paragraphs[i];

            while(unused_paragraphs[i].length != 0) {
                var rand = Math.floor(Math.random() * unused_paragraphs[i].length);
                if(unused_paragraphs[i][rand].search(text_box_value) !== -1) {
                    $("#paragraphs_container").append('<p>' + unused_paragraphs[i][rand] + '</p>');
                    break;
                }

                unused_paragraphs[i].splice(rand, 1);
            }   
        }

        console.log(unused_paragraphs);
        console.log(paragraphs);

    });

});

My question is why when I use splice method on unused_paragraphs variable it also remove the value from the paragraphs variable 我的问题是,为什么当我使用splice的方法unused_paragraphs变量也从删除值paragraphs变量

Later edit JSFiddle 稍后编辑 JSFiddle

javascript objects/array are stored by reference. javascript对象/数组通过引用存储。

If you want a copy that's a trick: 如果你想要一个诀窍的副本:

if(typeof unused_paragraphs == "undefined") {
        var unused_paragraphs = [];
        for(var i = 0; i<paragraphs.length; i++) {
            unused_paragraphs[i] = paragraphs[i].slice(0);  
        }
}

and

unused_paragraphs[i] = paragraphs[i].slice(0);

to copy the obect to new object.. 将obect复制到新对象..

try this.. 尝试这个..

var unused_paragraphs= jQuery.extend(true, {}, paragraphs);

here is just an example of copied objects.. check it out 这里只是复制对象的一个​​例子..检查一下

http://jsfiddle.net/5ExKF/3/ http://jsfiddle.net/5ExKF/3/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM