Array.every returns 假而不是真
Array.every returns false instead of true
我正在做某事,我写的这段代码似乎 return 错误而不是正确的:
function checkValidUsers(validUsers)
{
var validIds = validUsers.map(function (user) { return user.id; });
return function (users)
{
var ids = users.map(function (user) { return user.id; });
return ids.every(function (id) { return id in validIds; } );
}
}
var check = checkValidUsers([{ id: 1 }, { id: 2 }, { id: 3 }]);
check([{ id: 2 }, { id: 3 }]); // return false
两个 map 函数 return 正确的数组(第一个为 [1,2,3],第二个为 [2,3]),但由于某些原因每个函数都不是。
谁能帮我找出代码中的错误?
不要使用 in
检查数组中的元素。
相反,使用 .indexOf
方法。
return ids.every(function (id) { return validIds.indexOf(id) != -1; });
in
可以像这样用在 coffeescript 中,但在 JS 中,它只是一个迭代器操作符。尝试:
return ids.every(function (id) { return ~validIds.indexOf(id); });
您的代码中有 missing/wrong 个字符,这是一个完整的工作代码:
function checkValidUsers(validUsers) {
var validIds = validUsers.map(function (user) { return user.id; });
return function (users) {
var ids = users.map(function (user) { return user.id; });
return ids.every(function (id) { return ~validIds.indexOf(id); });
};
}
var check = checkValidUsers([
{ id: 1 }, { id: 2 }, { id: 3 }
]);
check([{ id: 2 }, { id: 3 }]);
如果你想使用 in 你需要稍微改变你 validIds
var validIds = validUsers.reduce(function (acc,user) {
acc[user.id]=true;
return acc;
},{});
function checkValidUsers(validUsers) {
var validIds = validUsers.reduce(function (acc,user) { acc[user.id]=true; return acc; },{});
return function (users) {
var ids = users.map(function (user) { return user.id; });
return ids.every(function (id) { return id in validIds; });
}
}
var check = checkValidUsers([
{ id: 1 }, { id: 2 }, { id: 3 }]);
document.getElementById('res').innerHTML = check([{ id: 2 }, { id: 3 }]);
<div id="res"></div>
我正在做某事,我写的这段代码似乎 return 错误而不是正确的:
function checkValidUsers(validUsers)
{
var validIds = validUsers.map(function (user) { return user.id; });
return function (users)
{
var ids = users.map(function (user) { return user.id; });
return ids.every(function (id) { return id in validIds; } );
}
}
var check = checkValidUsers([{ id: 1 }, { id: 2 }, { id: 3 }]);
check([{ id: 2 }, { id: 3 }]); // return false
两个 map 函数 return 正确的数组(第一个为 [1,2,3],第二个为 [2,3]),但由于某些原因每个函数都不是。
谁能帮我找出代码中的错误?
不要使用 in
检查数组中的元素。
相反,使用 .indexOf
方法。
return ids.every(function (id) { return validIds.indexOf(id) != -1; });
in
可以像这样用在 coffeescript 中,但在 JS 中,它只是一个迭代器操作符。尝试:
return ids.every(function (id) { return ~validIds.indexOf(id); });
您的代码中有 missing/wrong 个字符,这是一个完整的工作代码:
function checkValidUsers(validUsers) {
var validIds = validUsers.map(function (user) { return user.id; });
return function (users) {
var ids = users.map(function (user) { return user.id; });
return ids.every(function (id) { return ~validIds.indexOf(id); });
};
}
var check = checkValidUsers([
{ id: 1 }, { id: 2 }, { id: 3 }
]);
check([{ id: 2 }, { id: 3 }]);
如果你想使用 in 你需要稍微改变你 validIds
var validIds = validUsers.reduce(function (acc,user) {
acc[user.id]=true;
return acc;
},{});
function checkValidUsers(validUsers) {
var validIds = validUsers.reduce(function (acc,user) { acc[user.id]=true; return acc; },{});
return function (users) {
var ids = users.map(function (user) { return user.id; });
return ids.every(function (id) { return id in validIds; });
}
}
var check = checkValidUsers([
{ id: 1 }, { id: 2 }, { id: 3 }]);
document.getElementById('res').innerHTML = check([{ id: 2 }, { id: 3 }]);
<div id="res"></div>