创建新列表

时间:2017-11-15 22:42:15

标签: javascript

假设我有以下列表:

[["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"],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""],[""]]));




2 个答案:

答案 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);