2017-07-03 29 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>