【发布时间】:2018-07-29 21:54:57
【问题描述】:
我有一个用户列表以及他们已经收到的内容。
users = [
{ name: 'Steve', received_contents: ['1a', '1b', '3c'] },
{ name: 'Virginie', received_contents: ['3a', '2b', '3c'] },
{ name: 'Fiona', received_contents: ['1b', '2a', '3b'] },
{ name: 'Jenny', received_contents: ['3b', '2c', '1b'] },
{ name: 'James', received_contents: ['2b', '1b', '3a'] },
{ name: 'Fede', received_contents: ['2c', '3a', '1c'] },
{ name: 'Sara', received_contents: ['3a', '2c', '3b'] },
{ name: 'Tizi', received_contents: ['2b', '1b', '2a'] },
{ name: 'Thomas', received_contents: ['3c', '2b', '1a'] },
]
// 这些是下一批货的箱子和里面的东西
boxes = [
{ code: 'gr1', contents: ['1a', '1b'] },
{ code: 'gr2', contents: ['1a', '2b'] },
{ code: 'gr3', contents: ['1b', '2c'] },
{ code: 'gr4', contents: ['2c', '3c'] },
{ code: 'gr5', contents: ['3b', '1c'] },
]
任务是创建一个函数,该函数接受用户列表并返回用户列表和他们可以接收的框,而无需再次获取相同的内容。
对于如何使我的解决方案更有效、更省时,我有点困惑。
这是我的解决方案:
for (var i in users ){
let user = users[i];
console.log("User "+user.name+ " can receive " + getReceivableBoxes(user.received_contents));
}
function getReceivableBoxes (contents){
let receivableBoxes = [];
for(var i in boxes){
let box = boxes[i];
let canReceive = canReceiveBox(contents, box);
if(canReceive){
receivableBoxes.push(box.code);
}
}
return receivableBoxes;
}
function canReceiveBox(received_contents, box) {
let receivableBoxes = [];
for (var i = 0; i < received_contents.length; i++) {
for (var j = 0; j < box.contents.length; j++) {
if (box.contents[j] === received_contents[i]) {
return false;
}
}
}
return true;
}
【问题讨论】:
-
@GeorgeJempty 该问题具有不同类型的数组。我将我的解决方案提供给其他人检查。
标签: javascript jquery arrays query-performance