Js操作数组和对象

http://monopocket.jp/blog/javascript/2137/

JavaScript でオブジェクトや配列をコピーする方法

オブジェクトのコピー – JavaScript

1 var object1 = {a: true, b: false};
2 var object2 = $.extend(true, {}, object1);
3 // object2 を変更する
4 object2.c = true;
5 console.log(object1); // 出力: {a: true, b: false} (中身は変更されない)
6 console.log(object2); // 出力: {a: true, b: false, c: true}

配列のコピー – JavaScript

1 var array1 = [1 , 2, 3];
2 var array2 = $.extend(true, [], array1);
3 // array2 を変更する
4 array2.push(4);
5 console.log(array1); // 出力: [1, 2, 3] (中身は変更されない)
6 console.log(array2); // 出力: [1, 2, 3, 4]


【訂正】下記方法には重複している要素が削除されないなどの問題があります。詳しくはコメント欄を参照してください。

http://qiita.com/_shimizu/items/b8eac14f399e20599818


配列の中から特定の要素を削除したいときはsomeメソッドを使うと便利。

var array1 = [10, 20, 30, 40, 50];
var target = 30;

//要素を削除する
array1.some(function(v, i){
    if (v==target) array1.splice(i,1);    
});

console.log(array1) //=> [10, 20, 40, 50];


/*
 * 連想配列から特定の要素を排除したいときにも便利
 */
var array2 = [
    {id:1, name:"hoge"},
    {id:2, name:"test"},
    {id:3, name:"hello"},
    {id:4, name:"world"},
    {id:5, name:"hoge"},
    {id:6, name:"test"},
    {id:7, name:"hello"}
];

var targetId = 3;
array2.some(function(v, i){
    if (v.id==targetId) array2.splice(i,1); //id:3の要素を削除
});

var targetName = 'hello';
array2.some(function(v, i){
    if (v.name==targetName) array2.splice(i,1);  //name:helloの要素を全て削除
});

TIPS:null埋め、delete、spliceで削除の違い

if (v==target) array1[i] = null; 
//null値が入る。for~inに引っかかる。lengthは変わらない。

if (v==target) delete array1[i]; 
//undefinedが入る。for~inに引っかからない。lengthは変わらない。

if (v==target) array1.splice(i,1);
//完全に削除。for~inに引っかからない。length減る。


【JavaScript】配列から空文字の要素を削除する

https://www.softel.co.jp/blogs/tech/archives/3924

問題

以下の配列から、空文字の要素を削除してください。

var a = ["", "123", "abc", "xyz", "", "987", "hoge", "", "fuga"]

答え

素直に1つずつ内容を見て、新しい配列に移していく
var a = ["", "123", "abc", "xyz", "", "987", "hoge", "", "fuga"];
var x = [];
for (var i = 0; i < a.length; ++i) {
    if (a[i] !== "") x.push(a[i]);
}
//alert(x); // -> 123,abc,xyz,987,hoge,fuga
var a = ["", "123", "abc", "xyz", "", "987", "hoge", "", "fuga"];
var b, x = [];
while ((b = a.shift()) !== undefined) {
    if (b !== "") x.push(b);
}
//alert(x); // -> 123,abc,xyz,987,hoge,fuga
IEだとIE9以降でないとだめだけど、Array.filterを使うと
var a = ["", "123", "abc", "xyz", "", "987", "hoge", "", "fuga"];
var x = a.filter(function(e){return e !== "";});
//alert(x); // -> 123,abc,xyz,987,hoge,fuga
jQueryがあれば!
var a = ["", "123", "abc", "xyz", "", "987", "hoge", "", "fuga"];
var x = $.grep(a, function(e){return e !== "";});
//alert(x); // -> 123,abc,xyz,987,hoge,fuga

数字の0やundefinedやfalseなども除去してよければ、

var a = ["", "123", "abc", "xyz", "", "987", "hoge", "", "fuga", 0, undefined, false];
var x = $.grep(a, function(e){return e;});
//alert(x); // -> 123,abc,xyz,987,hoge,fuga

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值