【问题标题】:Convert 1D Array to 2D Array and append Array to last Row of Sheet将一维数组转换为二维数组并将数组附加到工作表的最后一行
【发布时间】:2020-07-26 20:15:13
【问题描述】:

我有 2 个数组列表,从中我可以找到不同之处。

arr1 = ['Sam','Annie', 'Margorie', 'Ester', 'John'];
arr2 = ['Bill', 'Sally', 'Sam', 'Annie', 'Suman', 'Margorie', 'Ester', 'Pierre', 'John'];

var diff = arr2.filter(x => !arr1.includes(x));

console.log(diff) //result....diff = ['Bill', 'Sally', 'Suman', 'Pierre']

我要做的是修改上面的过滤箭头函数,为每个项目添加“新”,这样结果数组就变成了:

//diff = [['Bill', 'New'] , ['Sally', 'New'] , ['Suman', 'New'] , ['Pierre' , 'New']]

我可以使用这样的地图箭头函数单独执行此操作:

diff = diff.map(x => [x,'New']);
  • 但我想将这两个功能结合在一起。这可能吗?

  • 另外,当我尝试将此数组附加到工作表的最后一行时,最后一行显示“Object@xxx”而不是实际值。

例如

Sht.appendRow(diff);

我做错了什么?

【问题讨论】:

    标签: arrays google-apps-script compare difference


    【解决方案1】:

    要结合 map/filter,使用简单的 for-loop/if 或 reduce:

    arr1 = ['Sam','Annie', 'Margorie', 'Ester', 'John'];
    arr2 = ['Bill', 'Sally', 'Sam', 'Annie', 'Suman', 'Margorie', 'Ester', 'Pierre', 'John'];
    
    const diff = arr2.reduce((diff,x) => !arr1.includes(x) ? [...diff , [x, "New"]] : diff, [] );
    
    console.log(diff) //result....diff = ['Bill', 'Sally', 'Suman', 'Pierre']

    Sheet#appendRow 只接受一维(一维)数组。如果要附加二维数组,请使用 range.setValues()

    【讨论】:

    • 谢谢。顺便说一句,这可以重写为普通的javascript而不是使用箭头函数吗?我仍在努力使用箭头功能。
    • @sifar const diff = arr2.reduce(function(diff,x) { return !arr1.includes(x) ? [...diff , [x, "New"]] : diff}, [] ); 或更详细的const diff = arr2.reduce(function(diff,x) { if (!arr1.includes(x))return diff.concat([x, "New"]); return diff}, [] );
    • 太棒了!但是有理由使用Const 而不是Var 吗?从速度性能的角度来看,大范围内哪个应该更快?
    • @sifar constlet 由于范围限制而更可取,因此不易出错。 var 通常应避免使用。 JavaScript tag info page拥有极好的资源。
    猜你喜欢
    • 1970-01-01
    • 2016-02-18
    • 2018-02-19
    • 2022-01-15
    • 2021-11-23
    • 2021-07-20
    相关资源
    最近更新 更多