我有2个数组,sendInstalls和sendUsers。两个数组都有一个名为objId的属性,在两个数组中具有匹配值。数组不按任何特定顺序排序。
我想做什么:
我尝试了以下内容:
sendUsers.forEach(function(theSentUser){
function findWithAttr(array, attr, value){
for (var i = 0; i < array.length; i += 1){
if(array[i][attr] === value){
return i;
};
};
};
var matchInstall = findWithAttr(sendInstalls,'devToken',theSentUser.objId);
console.log(matchInstall);
theSentUser.objToken = sendInstalls[matchInstall].devToken;
});
然而,console.log(matchInstall)行返回'undefined'行而不是匹配数组索引。
没有粘贴数据,因为它是用户敏感的,但是上面有什么问题吗?如果数据对解决这个问题至关重要,我可以尝试匿名摘录并更新这个问题。
非常感谢任何帮助。
干杯
答案 0 :(得分:0)
现在你没有在你的问题中提到你的数组的结构,但假设你已经正确定义和编码,你可能只需要在遍历{{}的循环外定义函数findwithAttr
。 1}}数组如此(未经测试的代码):
SendUsers
您在循环中定义并使用了可能导致问题的功能。我希望这能让你开始朝着正确的方向前进。
答案 1 :(得分:0)
首先感谢Vivek的快速反应。
根据我对Vivek的回答的评论,主要问题是'devToken'是与theSentUser.objId比较的错误键,所以它总是以未定义的形式出现。愚蠢的错误,道歉并且不可能让Vivek不知道阵列的结构。
我还需要为matchInstall引入一些错误处理。
以下代码可以帮助其他人尝试实现类似的功能。
function findWithAttr(array, attr, value){
for (var i = 0; i < array.length; i += 1){
if(array[i][attr] === value){
return i;
};
};
};
sendUsers.forEach(function(theSentUser){
var matchInstall = findWithAttr(sendInstalls,'usrId',theSentUser.objId);
if(typeof (matchInstall) === "undefined"){
theSentUser.objToken = 0
console.log('error')
} else {
theSentUser.objToken = sendInstalls[matchInstall]['devToken']
console.log(theSentUser.objToken)
};
});