2017-03-03 189 views
-4

對象的JavaScript的數組刪除重複我有一個對象如下所示基於密鑰

var fileList = [ 
{ 
    identifier: "auto-1", 
    file: "mp.mp3" 
}, 
{ 
    identifier: "auto-2", 
    file: "ss.mp3" 
}, 
{ 
    identifier: "auto-3", 
    file: "mj.mp3" 
}, 
{ 
    identifier: "type1", 
    file: "ss.mp3" 
}, 
{ 
    identifier: "type2", 
    file: "sc.mp3" 
}, 
{ 
    identifier: "tyep3", 
    file: "mj.mp3" 
} 
] 

我試圖刪除數組元素。如果identifier包含文本auto,我想刪除元素,如果該對象的file匹配的file包含在對象中的標識符爲type1type2type3。標識符將是唯一的。

預期輸出

[ 
{ 
    identifier: "auto-1", 
    file: "mp.mp3" 
}, 
{ 
    identifier: "type1", 
    file: "ss.mp3" 
}, 
{ 
    identifier: "type2", 
    file: "sc.mp3" 
}, 
{ 
    identifier: "tyep3", 
    file: "mj.mp3" 
} 
] 

我曾嘗試下面的代碼片段,但由消除標識符type1type2 ...等物體得到的唯一值。

_.uniq(fileList ,function(item){ return item.file + item.identifier; }) 
+0

你在看不清楚的問題,請重新制定。我不明白你需要什麼。 –

+0

請清楚說明你正在尋找的是什麼 – Geeky

+0

@NelsonTeixeira你可以請讓我知道你到底在找什麼直線前進,這裏我指定了輸入對象和輸出對象 – Sri

回答

1

從我理解的那個小。 你可以用減少這一

檢查代碼片段

var fileList = [{ 
 
    identifier: "auto-1", 
 
    file: "mp.mp3" 
 
    }, 
 
    { 
 
    identifier: "auto-2", 
 
    file: "ss.mp3" 
 
    }, 
 
    { 
 
    identifier: "auto-3", 
 
    file: "mj.mp3" 
 
    }, 
 
    { 
 
    identifier: "type1", 
 
    file: "ss.mp3" 
 
    }, 
 
    { 
 
    identifier: "type2", 
 
    file: "squirrel-chatter.mp3" 
 
    }, 
 
    { 
 
    identifier: "type3", 
 
    file: "mj.mp3" 
 
    } 
 
] 
 
var fileList2 = [{ 
 
    identifier: "auto-1", 
 
    file: "mp.mp3" 
 
}, { 
 
    identifier: "type1", 
 
    file: "mp.mp3" 
 
}] 
 

 
var result; 
 

 
result = fileList2.reduce(function callback(result, key, index, keysArray) { 
 
    debugger; 
 
    let indx = result.findIndex((item) => item.file === key.file) 
 
    if (indx > -1) { 
 
    result[indx].identifier = (key.identifier.includes("type")) ? key.identifier : result[indx].identifier 
 
    } else { 
 
    result.push(key) 
 
    } 
 
    return result 
 
}, []) 
 

 
console.log(result)

希望它可以幫助

+0

感謝快速回復@Geeky,這是返回相同的列表 – Sri

+0

沒有過濾輸出結果...你是什麼意思,同一個列表? – Geeky

+0

對不起,你是絕對正確的,我們可以做到這一點,沒有硬編碼'(key.identifier.includes(「類型」))',因爲它將包含像'體育','電影','大學'等不同的值...而不是使用「類型」,我們可以使用'自動',因爲汽車將是肯定有 – Sri

0

我不太瞭解您的唯一標準:您的解釋和預期產出似乎有衝突。

但是至少可以嘗試接受迭代函數的_.uniqByhttps://lodash.com/docs/4.17.4#uniqBy

_.uniq不,這可能是你的問題。