如何从数组 elemnets 中删除空字符串

How to remove empty strings from array elemnets

提问人:victoriousVINAY 提问时间:11/16/2022 最后编辑:KonradvictoriousVINAY 更新时间:11/16/2022 访问量:266

问:

在这里,我获取一个字符串数据并将其转换为数组元素,但它最终在所有数组元素中得到一个空数组,我无法轻松删除它们。请帮忙。

let string_Data = `01226,Grover Cleveland,Anna,Uganda,Crucial Ltd,Tested Mutual B.V,Calvin Coolidge,
    77110,John F. Kennedy,hora,Bosnia Herzegovina,Formal,Papal Corporation,Franklin Roosevelt,
    29552,Lyndon B. Johnson,Margaret,Palau,Summaries Holdings Inc,Customize,Rutherford B. Hayes,`;

let making_Array = csv => {
  var data = [];

  for (let dataAry of csv.split('\n')) {

    data.push(dataAry.split(','));
  }
  return data;

}
console.log(making_Array(string_Data));

JavaScript 数组 for-of-loop

评论

1赞 Barmar 11/16/2022
你位于每行的末尾,所以最后一项之后有一个空字符串。,
0赞 Konrad 11/16/2022
为什么您的数据位于每行的末尾?似乎缺少一列,
0赞 victoriousVINAY 11/16/2022
因为它是 CSV 数据,并且用逗号分隔

答:

0赞 Barmar 11/16/2022 #1

空字符串是因为每行末尾的 。,

可以使用该方法删除数组的最后一个元素。slice()

data.push(dataAry.split(',').slice(0, -1))

当您使用负索引作为切片的末尾时,它将从末尾开始计数。

评论

0赞 Metro Smurf 11/16/2022
作为参考,该参数向后计数:负索引从数组末尾开始倒计 — 如果 end < 0,则使用 end + array.length 因此,在本例中,数组的最后一个元素被删除。-1
0赞 chovy 11/16/2022 #2

这将删除空字符串,但也会删除值。falsey

const values = arr.filter(Boolean);

评论

1赞 Barmar 11/16/2022
对于 CSV 来说可能不是一个好主意,因为它会删除行中间的空值。这将导致不同的行具有不同的列。
0赞 victoriousVINAY 11/16/2022
这就是为什么我们首先将它与\n分开的原因
1赞 Yanick Rochon 11/16/2022 #3

您可以在拆分之前准备字符串,而不是操作数组。

let string_Data = `01226,Grover Cleveland,Anna,Uganda,Crucial Ltd,Tested Mutual B.V,Calvin Coolidge,
    77110,John F. Kennedy,hora,Bosnia Herzegovina,Formal,Papal Corporation,Franklin Roosevelt,
    29552,Lyndon B. Johnson,Margaret,Palau,Summaries Holdings Inc,Customize,Rutherford B. Hayes,`;

let making_Array = csv => {
  var data = [];

  for (let dataAry of csv.split('\n')) {
    // 1. trim both ends of the line for white space, tab, etc.
    // 2. remove any last trailing comma
    // 3. split using comma separator
    data.push(dataAry.trim().replace(/,$/, '').split(','));
  }
  return data;

}
console.log(making_Array(string_Data));


FWIW 整个功能可以像这样简化和增强:

let header = ['id', 'col1', 'col2', 'col3', 'col4', 'col5', 'col6'];

let string_Data = `01226,Grover Cleveland,Anna,Uganda,Crucial Ltd,Tested Mutual B.V,Calvin Coolidge,
    77110,John F. Kennedy,hora,Bosnia Herzegovina,Formal,Papal Corporation,Franklin Roosevelt,
    29552,Lyndon B. Johnson,Margaret,Palau,Summaries Holdings Inc,Customize,Rutherford B. Hayes,`;

let making_Array = csv => csv
  .split('\n')
  .map(line => line
    .trim()             // 1. trim both ends of the line        
    .replace(/,$/, '')  // 2. remove any last trailing comma
    .split(','))        // 3. split using comma separator
    .map(cols => Object.fromEntries(new Map(header
      .map((colName, index) => [colName, cols[index] || '']))));

console.log(making_Array(string_Data));

评论

0赞 victoriousVINAY 11/16/2022
多谢。这对我有很大帮助,我也尝试更换,但不知道在哪里使用它。谢谢
0赞 Yanick Rochon 11/16/2022
没关系!如果你想将数组转换为某个对象,看看我刚刚发布的编辑。干杯!
1赞 victoriousVINAY 11/16/2022
你怎么知道,这是我程序的第二步。你真可怕