假设我有以下列表:
[["Accounts"],["Budget Propane"],[""],[""],[""],["Laser AMP"],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""]]
使用常规功能,我怎样才能以新列表[account1, account2]
的方式解析该列表?
所以我需要删除所有的subempty列表和元素[Accounts]
。
function isBlank(line) {
return line[0].trim() === '';
}
function parseData(data) {
const output = [];
data.forEach(function(line, index) {
if (isBlank(line) || index === 0) {
return;
}
output.push(line[0])
});
return output;
}
console.log(parseData([["Accounts"],["Budget Propane"],[""],[""],[""],["Laser AMP"],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""]]));

答案 0 :(得分:1)
myList.reduce((acc, val, idx) => (idx !== 0 && val.length && val[0]) ? acc.concat(val) : acc, []);
这是使用过滤器进行标准列表展平,这本身就是一种减少操作。减少需要一个列表并将其减少为单个值,在这种情况下是一个扁平列表,因为它列出了列表。
你似乎是js的新手,所以引导你完成这个...我从myList开始,这是你的数组,我正在运行数组操作" reduce"在它上面,这就是我上面解释的。 reduce的第一个参数是一个函数,称为reducer,在原始数组中的每个项上运行,该函数有几个参数,reducer的第一个参数是"累积值"在这种情况下命名为acc,这是reduce给你的最终值,第二个名为" val"是我操作的列表中的当前项目,在这种情况下,第3项是当前索引,因为我们需要它用于我们的过滤器。
我在我的reducer中所做的只是第一次检查索引是不是0,然后比当前项目有一个长度(0计为没有长度),然后是第一个项目的值当前项目是" truthy" (空字符串是假的)。如果所有这些都是真的,我将当前项连接到我的累计值,concat只从2中列出1个列表。如果有任何是假的,我只是跳过该项。 reduce的最后一个参数是起始值,在本例中是一个空数组。
编辑:已编辑以过滤掉包含一个空白条目的列表项。
答案 1 :(得分:1)
var parseList = function(list){
var result = [];
for(var l2 of list){
for(var el of l2){
if(el !== Accounts) result.push(el);
}
}
return result;
};
或
list.map(el => el.length ? el[0] : el).filter(el => !Array.isArray(el) && el !== Accounts);