我在经历这两个for循环时遇到问题,我需要从循环内的第一个数组中获取相同的元素,但是值是重复的。我知道根据第二个数组的数据重复它们。
我试图进行比较,但无法获得想要的结果。
var array = [
{
grouper: 1
},
{
grouper: 2
},
{
grouper: 3
},
{
grouper: 4
},
];
var array2 = [
{
value: 1,
grouper: 1,
status: 100
},
{
value: 2,
grouper: 2,
status: 100
},
{
value: 3,
grouper: 3,
status: 100
}
];
for(var i = 0; i<array.length; i++){
for(var j = 0; j<array2.length; j++){
if(array2[j].grouper == array[i].grouper){
console.log(array[i].grouper+'-'+array2[j].value);
}
}
}
这是我想要的结果,我需要第一个数组中的所有石斑鱼和第二个数组中的值:
1-1
2-2
3-3
4-
石斑鱼4没有价值,但我需要证明它。
我需要第二个数组,因为我要与第二个数组中的数据进行比较
我不知道我做错了什么。我希望你能帮助我。
答案 0 :(得分:0)
首先,通过您提供的示例,我相信您想回来:
1,2,3
array2内没有第4个对象,因此您的条件(array2[j].grouper == array[i].grouper
将永远不会为true。
这里的问题是,是否始终在比较相同的索引?在此示例中,您正在将array [0]与array2 [0]进行比较,以查看array中的分组者是否等于array2中的分组者……就是这样?
在这种情况下,您只需执行一个循环:
for (var i = 0; i < array.length; i++) {
if (array[i].grouper == array2[i].grouper) {
console.log(array[i].grouper+'-'+array2[j].value);
}
}
答案 1 :(得分:0)
您可以简单地跟踪是否存在匹配项(变量shown
),如果没有匹配项,则显示“一半”行:
var array = [{grouper: 1},{grouper: 2},{grouper: 3},{grouper: 4},];
var array2 = [
{value: 1, grouper: 1, status: 100},
{value: 2, grouper: 2, status: 100},
{value: 3, grouper: 3, status: 100}
];
for(var i = 0; i<array.length; i++){
var shown=false;
for(var j = 0; j<array2.length; j++){
if(array2[j].grouper == array[i].grouper){
console.log(array[i].grouper+'-'+array2[j].value);
shown=true;
}
}
if(!shown){
console.log(array[i].grouper+"-");
}
}
答案 2 :(得分:0)
@FabianSierra ...与您提供的示例一样,您只需要在最内部的循环中处理未实现的if
子句/条件。
另外,更通用的方法可能会考虑更改字段名称(键)。因此,基于函数和基于Array.reduce
/ Array.find
的方法可提供更好的代码重用。然后,一个示例实现可能看起来类似于...
var array = [{ // in order.
grouper: 1
}, {
grouper: 2
}, {
grouper: 3
}, {
grouper: 4
}];
var array2 = [{ // not in the order similar to `array`.
value: 22,
grouper: 2,
status: 200
}, {
value: 33,
grouper: 3,
status: 300
}, {
value: 11,
grouper: 1,
status: 100
}];
function collectRelatedItemValuesByKeys(collector, item) {
var sourceKey = collector.sourceKey;
var targetKey = collector.targetKey;
var targetList = collector.targetList;
var resultList = collector.result;
var sourceValue = item[sourceKey];
var targetValue;
var relatedItem = targetList.find(function (targetItem) {
return (targetItem[sourceKey] === sourceValue);
});
if (typeof relatedItem !== 'undefined') {
targetValue = relatedItem[targetKey];
} else if (typeof targetValue === 'undefined') {
targetValue = ''; // `relatedItem` does not exist.
}
resultList.push([sourceValue, targetValue].join('-'));
return collector;
}
var resultList = array.reduce(collectRelatedItemValuesByKeys, {
sourceKey: 'grouper',
targetKey: 'value',
targetList: array2,
result: []
}).result;
console.log('resultList : ', resultList);
resultList = array.reduce(collectRelatedItemValuesByKeys, {
sourceKey: 'grouper',
targetKey: 'status',
targetList: array2,
result: []
}).result;
console.log('resultList : ', resultList);
.as-console-wrapper { max-height: 100%!important; top: 0; }