我要比较一个数组,以查看数组1中的值是否在对象内部的任何数组中:
arr1 = [9]
obj1 = {Cards: [8,5], Loans: [], Shares: [0,9,25]}
我正在使用JavaScript(ECMAScript 5)尝试执行此操作,如果在true
中找到了arr1
中的任何值,我需要返回obj1
。
我尝试过的事情:
function arraysEqual(_arr1, _arr2) {
if (!Array.isArray(_arr1) || !Array.isArray(_arr2) || _arr1.length !== _arr2.length)
return false;
var arr1 = _arr1.concat().sort();
var arr2 = _arr2.concat().sort();
for (var i = 0; i < arr1.length; i++) {
if (arr1[i] !== arr2[i])
return false;
}
return true;
}
但是,这只会测试看看是否是特定的数组,因此我必须调用此命令三次以检查值,即使在尝试以下操作时,它也会返回false
:
arraysEqual(arr1, obj1.Shares)
希望一次通话即可完成
答案 0 :(得分:2)
您可以使用every
检查arr1
中的indexOf
项目是否在arr2中:
function compare(arr1, arr2) {
return arr1.every(function(n){
return arr2.indexOf(n) > -1
})
}
var arr = [9],
obj = { Cards: [8,5], Loans: [], Shares: [0,9,25] }
console.log(compare(arr, obj.Shares))
console.log(compare(arr, obj.Cards))
答案 1 :(得分:0)
您可以使用for ... in循环来遍历对象,然后可以使用for循环来遍历主数组,最后在您的辅助数组(来自对象)上使用array.includes来查看主数组中是否有任何元素存在于辅助数组中
List<List<Integer>> result =
nodes.values() // Collection<Map<Integer, List<Integer>>>
.stream() // Stream<Map<Integer, List<Integer>>>
.flatMap(m -> m.values() // Collection<List<Integer>>>
.stream()) // Stream<List<Integer>>>
// flatMap() prevents Stream<Stream<...>>.
// Indeed we get just Stream<List...>>
.collect(Collectors.toList());
答案 2 :(得分:0)
另一种方法是使用Array.prototype.some(),
var array = [8,9];
var obj = {o1:[18,99], o2:[19], o3:[8,56]};
var p = array.some((arr) => {
var ret = Object.values(obj).find((value) => {
return value.find((val) => val === arr);
});
return ret ? true : false;
});
console.log(p);
答案 3 :(得分:0)
这应该工作:
let arr1 = [9, 8]
let obj1 = {Cards: [8,5], Loans: [], Shares: [0,9,25]}
function check(arr1, obj1) {
let values = Object.keys(obj1).map((key)=> obj1[key]).reduce((acc, val) => acc.concat(val));
for(let n of arr1) {
if(values.indexOf(n) === -1) return false;
}
return true;
}
console.log(check(arr1, obj1));