2016-09-01 4 views
3

私はオブジェクトの配列を持っているので、オブジェクトが空のときにオブジェクトのプロパティをスライスしたいと思います。例えば配列に含まれるオブジェクトの空のプロパティをスプライスする方法はありますか?

var quotes = [ 
{ 
    quote: "Bolshevism is not a policy; it is a disease. It is not a creed; it is a pestilence.", 
    source: "Winston Churchill", 
    citation: "", 
    year: "29 May 1919", 
    place: "" 
}, 
{ 
    quote: "Learn while you live", 
    source: "", 
    citation: "X", 
    year: "1950", 
    place: "" 
}]; 

私はランダムに空のオブジェクト名を持つそのようなオブジェクトのリストを持っています。

空でないプロパティだけをページに印刷したいと思います。

だから私は(のindexOfを見つけるために、オブジェクトをループにしようとしている)空のプロパティと、それをスプライス:

+0

オブジェクトには順序がありません。オブジェクトをオフセットでスライスするのはかなり無意味です。 – deceze

+0

このサンプルデータでは、正確に何が結果になるでしょうか? – Cerbrus

答えて

5

スプライスは、配列のために使用されているあなたの助けを

function findEmptyProp(quotes) { 
    for (prop in quotes) { 
    if(quotes[i].children === '') { 
     return indexOf(quotes[i]); 
     quotes.splice(i, 1); 
}}} 

おかげで、しかしときオブジェクトを扱う場合は、deleteを使用する必要があります。あなたはこのような何か試すことができます

decezeでコメントしたよう

var quotes = [{ 
 
    quote: "Bolshevism is not a policy; it is a disease. It is not a creed; it is a pestilence.", 
 
    source: "Wyston Churchill", 
 
    citation: "", 
 
    year: "29 May 1919", 
 
    place: "" 
 
}, { 
 
    quote: "Learn while you live", 
 
    source: "", 
 
    citation: "X", 
 
    year: "1950", 
 
    place: "" 
 
}]; 
 

 
quotes.forEach(function(o){ 
 
    for (var k in o){ 
 
    if(o.hasOwnProperty(k) && isEmpty(o[k])){ 
 
     delete o[k]; 
 
    } 
 
    } 
 
}); 
 

 
function isEmpty(val){ 
 
    return val === undefined || 
 
    val === null || 
 
    (typeof(val) === "object" && Object.keys(val).length === 0) || 
 
    (typeof(val) === "string" && val.trim().length === 0) 
 
} 
 

 
console.log(quotes)

を、私は値が空とみなすことができ、他の例のために扱う追加されました。また、自身のプロパティを更新するにはhasOwnPropertyをチェックする必要があります。

+0

文字列以外の値( 'trim()'が失敗する可能性)と 'hasOwnProperty' ...を考えたいかもしれませんが、正しいアプローチです。 – deceze

+0

@deceze他の空のケースの処理を追加しようとしました。ありがとう – Rajesh

+0

完璧!ちょうど私が必要なもの! – delano

2

FYI:Object.keys(obj)を使用すると、意外にもオブジェクトのキーの配列が返されます。例えば。 ...

var arrayOfObjects = [ 
    { 
    prop1: '1', 
    prop2: '2', 
    prop3: '' 
    }, 
    { 
    prop1: '1', 
    prop2: '', 
    prop3: '3' 
    }, 
    { 
    prop1: '', 
    prop2: '2', 
    prop3: '3' 
    } 
]; 

arrayOfObjects.forEach(function(obj) { 
    /* 'obj' = each object in 'arrayOfObjects' */ 
    Object.keys(obj).forEach(function(key) { 
     /* 'key' = each key in 'obj' */ 
     if (obj[key] === '') delete obj[key]; 
    }); 
}); 

/* test arrayOfObjects */ 
arrayOfObjects.forEach(function(obj) { 
    console.debug(obj); 
}); 

/** => 
    Object { prop1: "1", prop2: "2" } 
    Object { prop1: "1", prop3: "3" } 
    Object { prop2: "2", prop3: "3" } 
**/ 

使用して配列関数オブジェクトの.forEach().filter().sort().reduce()、および.map()などのように、本当に便利です。

+0

入力いただきありがとうございます、大変感謝しています! – delano

関連する問題