2017-04-25 77 views
0

讓我們說我們有一個對象:與hasOwnProperty刪除重複

message { 
    diff: { 
    cat: "Tabby" 
    name: "Meow Meow" 
    } 
} 

你可以檢查與hasOwnProperty(一式兩份),做一個去除重複的?示例

for (key in message.diff) { 
    //outputs every change when all keys are updated 
    if (message.diff.hasOwnProperty(key)){ 
    this.uniqueArray.push(key); 
    } 
} 

編輯:我意識到可能有混淆,我想談談。 我有監聽任何形式的元件,其可以被更新,其記錄了輸入到控制檯的功能。它主要是傾聽屬性名稱。這將輸出到可能包含或不包含名稱重複的數組。

如果我們的表單字段很多很多次更新,就變成:

Current Output: ['name', 'name', 'name', 'cat'] 
Desired Ouput: ['name', 'cat'] 
+1

你總是會具有不同的屬性'diff' –

+0

是的,但我需要檢查,如果屬性名稱存在,將它添加到陣列之前將其刪除。數組中存在 – Demon

+0

? –

回答

0

您可以使用Object.keys()Array.prototype.filter()Array.prototype.includes()以檢查是否對象的屬性是數組,Array.prototype.push()的元素,擴散元件

var message = { 
 
    diff: { 
 
    cat: "Tabby", 
 
    name: "Meow Meow" 
 
    } 
 
} 
 

 
var arr = ["name", "cat"]; 
 

 
arr.push(...Object.keys(message.diff).filter(function(diff) {return !arr.includes(diff)})); 
 

 
console.log(arr); 
 

 
var message = { 
 
    diff: { 
 
    lion: "Tabby", 
 
    tiger: "Meow Meow" 
 
    } 
 
} 
 

 
arr.push(
 
    ...Object.keys(message.diff) 
 
    .filter(function(diff) {return !arr.includes(diff)})) 
 

 
console.log(arr);

+0

我不認爲我需要添加任何額外的屬性名稱。 – Demon

+0

@惡魔你是什麼意思?除非元素不是數組「arr」中的元素,否則不會將元素推送到數組「arr」。 「message」的第一個聲明表明重複的屬性名稱不會被推送到「arr」。第二個'message'聲明對於'arr'的元素具有唯一的屬性名稱;其中屬性名稱是'arr'唯一的,對象'message.diff'的唯一屬性名稱被推送到'arr'。這是要求,是嗎? – guest271314

+0

結果是數組'arr'不應該包含重複的元素。 _「使用hasOwnProperty刪除重複項」_元素不在數組中設置,因此數組中不應有重複項要刪除。 – guest271314

1

檢查對象項不存在數組

for (key in message.diff) { 
    //outputs every change when all keys are updated 
    if (message.diff.hasOwnProperty(key) && this.uniqueArray.indexOf(key) == -1){ 
    this.uniqueArray.push(key); 
    } 
} 
+0

你也應該完全放棄了'hasOwnProperty'通話(或[做](http://stackoverflow.com/a/13296897/1048572)[正確](http://eslint.org/docs/rules/guard- for-in)) – Bergi

+0

@Bergi你是什麼意思。請舉個例子。或者爲什麼'Object.hasOwnProperty(key)'不正確?我總是以這種方式使用它 –

+0

這是非常有幫助的。 – Demon