2017-07-03 55 views
0

的相同值i有一個對象獲取nasted對象

{eno: Object, sc: Object, r: Object} 

每個嵌套對象包含陣列示例

{ 
    eno :{data:[0,'a','b','3']}, 
    sc:{data:[0,'a','b','3','f','l']}, 
    r:{data:[0,'a','b','3','p']}, 
} 

每個對象的元件是動態 我怎樣才能獲得的每個數據的相同值array element

same value = [0,'a','b','3']如果沒有任何相同的元素some value ='nope'

+0

可以使用的forEach(),地圖(),降低()等函數來處理數組。 –

+0

這不是一個數組。陣列沒有鑰匙。並看看在https://stackoverflow.com/questions/44823326/find-common-elements-within-dynamic-arrays-object-elements-javascript/44823579#44823579 –

回答

1

var commonElements = function(array1, array2) { 
 
    return array1.filter(function(n) { 
 
    return array2.indexOf(n) !== -1; 
 
}); 
 
} 
 

 
var obj = { 
 
    eno :{data:[0,'a','b','3']}, 
 
    sc:{data:[0,'a','b','3','f','l']}, 
 
    r:{data:[0,'a','b','3','p']}, 
 
}; 
 

 
var result = commonElements(obj.eno.data, commonElements(obj.sc.data, obj.r.data)) || 'nope'; 
 

 
console.log('same value :' + result); 
 

 
/* Solution using map, reduce and filter*/ 
 
var res = Object.keys(obj) 
 
.map(o => obj[o].data) 
 
.reduce((a, b) => a.filter(c => b.includes(c))); 
 
console.log('same value :' + res|| 'nope');

+0

謝謝哈桑,如果我把它與forEach()和array.prototype它動態運行...你解決我的問題謝謝 – KEKUATAN

+0

歡迎的人!樂意效勞 :) –

1

由於@Alberto特林達德塔瓦雷斯的回答說,lodash的intersection可以用來獲得相同的值容易,代碼會很乾淨。 @Alberto Trindade Tavares的答案不提供代碼片段,並且在沒有相同值時也不處理「nope」邏輯。因此,我想下面張貼工作代碼段:

var obj = { 
 
    eno :{data:[0,'a','b','3']}, 
 
    sc:{data:[0,'a','b','3','f','l']}, 
 
    r:{data:[0,'a','b','3','p']}, 
 
} 
 

 
var sameVal = _.intersection(obj.eno.data, obj.sc.data, obj.r.data); 
 
var sameValDisplay = 'Nope'; 
 
if (sameVal.length > 0) { 
 
    sameValDisplay = sameVal.toString(); 
 
} 
 
console.log('Same value is: ' + sameValDisplay);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>