我有两个数组:mainArray和allowedArray。数组具有以下格式:
启动数组
mainArray
Array(18) [ "Bill", "AGLUK", "JAW", … ]
Array(18) [ "Bill", "AKI", "MONEY", … ]
Array(18) [ "Tom", "AGLUK", "JAW", … ]
Array(18) [ "Tom", "AKI", "MONEY", … ]
Array(18) [ "Cathy", "AGLUK", "JAW", … ]
Array(18) [ "Cathy", "AKI", "MONEY", … ]
allowedArray
Array(2) [ "Tom", "Cathy" ]
所需的输出
goodArray
Array(18) [ "Tom", "AGLUK", "JAW", … ]
Array(18) [ "Tom", "AKI", "MONEY", … ]
Array(18) [ "Cathy", "AGLUK", "JAW", … ]
Array(18) [ "Cathy", "AKI", "MONEY", … ]
badArray
Array(18) [ "Bill", "AGLUK", "JAW", … ]
Array(18) [ "Bill", "AKI", "MONEY", … ]
我尝试了各种代码,但都失败了:
mainArray.forEach(function(line) {
allowedArray.forEach(function(ID) {
if (line[0] == ID[0]) {
goodArray.push(line);
}
});
});
问题:goodArray始终为空
答案 0 :(得分:0)
您可以只使用some
方法。 (请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some)。
var answer = mainArray.some(a => allowedArray.indexOf(a) != -1) ? mainArray : [];
如果允许将其保留在其中,则将保留整个mainArray。
编辑:将“任意”替换为“某些”。
答案 1 :(得分:0)
如果我们将问题翻译成英文,我们会得到这样的东西:
对于mainArray
中的每个项目,检查其索引0的值是否存在于allowedArray
中。如果是这样,请将项目添加到goodArray
,否则将项目添加到badArray
。
这几乎可以从字面上翻译回javascript:
const mainArray = [
[ "Bill", "AGLUK", "JAW"],
[ "Bill", "AKI", "MONEY"],
[ "Tom", "AGLUK", "JAW"],
[ "Tom", "AKI", "MONEY"],
[ "Cathy", "AGLUK", "JAW"],
[ "Cathy", "AKI", "MONEY"],
];
const allowedArray = ["Tom", "Cathy"];
const goodArray = [];
const badArray = [];
// For each item in mainArray..
mainArray.forEach(function(item) {
// check if the value for index 0 is present in allowedArray.
// If so...
if (allowedArray.indexOf(item[0]) !== -1) {
// add the item to goodArray,
goodArray.push(item);
// otherwise...
} else {
// add the item to badArray
badArray.push(item);
}
});
console.log({ goodArray, badArray });
.as-console-wrapper {
max-height: 100% !important;
height: auto;
}
如果缩短一点,并且没有注释,它可能看起来像这样:
mainArray.forEach((record) => allowedArray.indexOf(record[0]) !== -1
? goodArray.push(record)
: badArray.push(record));
答案 2 :(得分:-1)
您可以使用一个辅助对象,并将检查数组作为对应数组的键。
var array = [["Bill", "AGLUK", "JAW"], [ "Bill", "AKI", "MONEY"], [ "Tom", "AGLUK", "JAW"], [ "Tom", "AKI", "MONEY"], [ "Cathy", "AGLUK", "JAW"], [ "Cathy", "AKI", "MONEY"]],
allowedArray = ["Tom", "Cathy"],
good = [],
bad = [],
temp = { true: good, false: bad };
array.forEach(function(line) {
temp[allowedArray.indexOf(line[0]) !== -1].push(line);
});
console.log(good);
console.log(bad);
.as-console-wrapper { max-height: 100% !important; top: 0; }
使用更新的ES,Array#includes
会更短。
var array = [["Bill", "AGLUK", "JAW"], [ "Bill", "AKI", "MONEY"], [ "Tom", "AGLUK", "JAW"], [ "Tom", "AKI", "MONEY"], [ "Cathy", "AGLUK", "JAW"], [ "Cathy", "AKI", "MONEY"]],
allowedArray = ["Tom", "Cathy"],
good = [],
bad = [],
temp = { true: good, false: bad };
array.forEach(line => temp[allowedArray.includes(line[0])].push(line));
console.log(good);
console.log(bad);
.as-console-wrapper { max-height: 100% !important; top: 0; }