获得相同的nasted对象值

时间:2017-07-03 09:21:37

标签: javascript arrays object

我有一个对象

{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'

3 个答案:

答案 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;
&#13;
&#13;

答案 2 :(得分:0)

您可以使用intersection function from Lodash

var _ = require('lodash');
var sameElements = _.intersection(eno.data, sc.data, r.data);