我有一个对象
{eno: Object, sc: Object, r: Object}
每个嵌套的Object都包含数组示例
{
eno :{data:[0,'a','b','3']},
sc:{data:[0,'a','b','3','f','l']},
r:{data:[0,'a','b','3','p']},
}
每个对象的元素都是动态的 如何获得每个数据数组元素的相同值
same value = [0,'a','b','3']
如果没有任何相同的元素some value ='nope'
答案 0 :(得分: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');
答案 1 :(得分:1)
@Alberto Trindade Tavares'回答说,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>
&#13;
答案 2 :(得分:0)
您可以使用intersection
function from Lodash
:
var _ = require('lodash');
var sameElements = _.intersection(eno.data, sc.data, r.data);