javascript - 如何在谷歌脚本中将数据添加/附加到多维数组

标签 javascript arrays multidimensional-array

是否可以在不使用谷歌表格(电子表格)来保存数据的情况下添加到未知大小的多维数组?到处寻找,找不到 3 维数组的示例。

这是我想做的:

var aDirTree=[];    
aDirTree[0][0][0]="myName1";
aDirTree[0][0][1]="myURL1";
aDirTree[1][0][0]="myName2";
aDirTree[1][0][1]="myURL2";
//Notice we are skipping elements
aDirTree[2][5][0]="myName3";
aDirTree[2][5][1]="myURL3";

跳过的值在哪里为空?我猜这可能是某种推送方法。

最佳答案

在惰性版本中,数组可以用作键(但它会转换为字符串):

var o = {}
o[[1,2,3]]='a'
o['4,5,6']='b'

console.log(o)           // { "1,2,3": "a", "4,5,6": "b" }
console.log(o[[0,0,0]])  // undefined

Proxy (not available in IE) 可以是另一种选择,但它会创造很多额外的值(value):

var handler = { get: (a, i) => i in a ? a[i] : a[i] = new Proxy([], handler) }

var a = new Proxy([], handler)

a[1][2][3]='a'
a[4][5][6]='b'

console.log(a)           // [[],[[],[],[[],[],[],"a"]],[],[],[[],[],[],[],[],[[],[],[],[],[],[],"b"]]]
console.log(a[0][0][0])  // []

最后,“真正的”答案:

function set(a, x, y, z, v) { ((a = a[x] || (a[x] = []))[y] || (a[y] = []))[z] = v }
function get(a, x, y, z, v) { return (a = a[x]) && (a = a[y]) && z in a ? a[z] : v }

var a = []
set(a,1,2,3,'a')
set(a,4,5,6,'b')

console.log( get(a,0,0,0) )            // undefined
console.log( get(a,0,0,0,'default') )  // "default"
console.log( a )                       // [,[,,[,,,"a"]],,,[,,,,,[,,,,,,"b"]]]


奖励:所有 3 个的组合,但效率不高,因为键被转换为字符串:

var a = [], p = new Proxy(a, { set: (a, k, v) => 
  ([x,y,z] = k.split(','), ((a = a[x] || (a[x] = []))[y] || (a[y] = []))[z] = v) })

p[[1,2,3]] = 'a'
p[[4,5,6]] = 'b'

console.log( a[[0,0,0]] )  // undefined
console.log( a )           // [,[,,[,,,"a"]],,,[,,,,,[,,,,,,"b"]]]

关于javascript - 如何在谷歌脚本中将数据添加/附加到多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47445596/

相关文章:

javascript - jquery 表单提交不适用于多个输入(IE 和 Firefox)

php - 清除 PHP Cookies 数组

php - 按计算列循环时对数据排序

javascript - JSON 对象转换中的嵌套数组

vba - 如果二维数组中的值存在于另一个二维数组中

javascript - 如何从同一 Controller 的另一个函数调用 Sails.js Controller 的函数?

javascript - 一些 TD 移动到新行后的多个 TD

c - C 语言的生命游戏问题

javascript - React Textarea 状态无法更新

c - 如何将二维数组传递给 C 函数