【问题标题】:How to apply a function to every item within a sublist of a list in Javascript? [duplicate]如何将函数应用于Javascript列表子列表中的每个项目? [复制]
【发布时间】:2014-10-09 23:55:54
【问题描述】:

以下函数循环遍历一个列表。如果子列表中的特定项目具有空白值,则将其替换为“无”。

lst.forEach(function (d) {

if(d.thefirstcolumn){} else {d.thefirstcolumn = "None"};
if(d.somethingelse){} else {d.somethingelse = "None"};
if(d.random){} else {d.random = "None"};
if(d.cold){} else {d.cold = "None"};
if(d.cole){} else {d.cole = "None"};
if(d.colf){} else {d.colf = "None"};
if(d.colg){} else {d.colg = "None"};
if(d.colh){} else {d.colh = "None"};
});

这不是很可扩展,因为我必须引用每个子列表中的每个项目,所以我要创建一个函数来为所有项目执行此操作,这样我就不必引用了。

例如,它会像下面这样简短,它将完成与前面的代码相同的结果,并对列表的每个子列表中的每个项目执行此操作。

lst.forEach(function (d) {
if(d.col){} else {d.col = "None"};
});

上面,我的意思是 d.col 指代 d.cola、d.colb、d.colc、d.cold 和所有其他项目。我将如何进行这项工作?

额外的问题是,如果子列表中的项目是数字,我将如何应用以下函数,否则只应用前一个函数?

例如,它会在子列表的每个项目上尝试这个

d.col = parseInt(d.col, 10);

否则,如果项目不是数字,它将运行以下内容

if(d.colh){} else {d.colh = "None"}

【问题讨论】:

  • 当列名在col中时使用d[col]
  • 好的,所以我需要更改我的示例,因为列名可能会有很大差异。
  • 所以?但是它可能会有所不同,您应该能够将它们全部放入col 变量中。您可以创建一个包含所有可能值的数组,然后对其进行迭代。
  • var cols = ["cola", "colb", ...]; 然后在你的forEach 函数中,你做cols.foreach(function(col) ... 然后使用d[col]
  • 对于 parseInt,它是 d[col] = parseInt(d[col], 10)

标签: javascript list for-loop


【解决方案1】:

做一些像下面这样的事情

var keys = ['firstCol','secondCol','cola'];

lst.forEach(function (d) {
    keys.forEach(function(key){
         d[key]=d[key]||"None";
    })
});

因此,如果key 不存在,它将获取每个对象并检查该对象,将 none 分配给该键。

【讨论】:

  • 如果密钥不存在,它不会出现在for (var key in d) 循环中。这仅在密钥存在但值为空时才有效。
  • @Barmar 根据情况更新了我的答案。
  • @Chris 我没明白你的意思。
  • 好吧,您的函数运行良好并且可以完成工作 - 但我想知道是否有一种方法可以将函数应用于所有键并在该函数返回错误时运行不同的函数。例如,我想应用这个:keys.forEach(function(key){d[key] = parseInt(d[key], 10)});但它只适用于字符串数字的值并应用 d[key]=d[key]||"None";如果有错误。
猜你喜欢
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多