我需要做的就是:
var a = [[[]]];
a[1][2][3] = "hello!"; // [...[undefined,undefined,undefined,"hello!"]...];
a[1][2][1] = "a"; // [...[undefined,"a",undefined,"hello!"]...]
a[2][3][4] = "new_index" // [...[undefined,"a",undefined,"hello!"]...[undefinedx4, "new_index"]]
在我的情况下,我不希望在指定索引之前实例化数组的大小,并在更大的索引需要时增加大小。 在javascript中最简单或最干净的方法是什么,因为js是支持多维数组的弱点?
答案 0 :(得分:1)
在JS数组中是引用类型,因此创建ND数组很棘手。 cloninig工具非常方便。因此,您可以执行以下操作;
extension Sequence where Iterator.Element == UIView {
func setHidden(_ hidden: Bool) {
for view in self {
view.isHidden = hidden
}
}
}
buttons.setHidden(true)
初始参数定义尺寸,最后一个参数是填充值。
这应该适用于与ES6兼容的浏览器;
Array.prototype.clone = function(){
return this.map(e => Array.isArray(e) ? e.clone() : e);
};
function arrayND(...n){
return n.reduceRight((p,c) => c = (new Array(c)).fill().map(e => Array.isArray(p) ? p.clone() : p ));
}
var arr = arrayND (2,3,4,"x")
console.log(JSON.stringify(arr));
答案 1 :(得分:1)
这是我的解决方案:
function assign(input) {
if ('object' !== typeof input) {
let tmp = {};
tmp[input] = arguments[1];
input = tmp;
}
let regex = /\.?([^.\[\]]+)|\[(\d+)]/g;
let result = {};
for (let p in input) {
let data = result, prop = '', match;
while (match = regex.exec(p)) {
data = data[prop] || (data[prop] = (match[2] ? [] : {}));
prop = match[2] || match[1];
}
data[prop] = input[p];
}
return result[''];
}
// Example usage
let a = assign('3[4][5]', 'hello');
let b = assign('3[4][5][6]', 'world!');
let c = assign('you.can.use.object.as.well', 'cool!');
let d = assign('or.mix[3].them[2]', 'together!');
let e = assign({'with.multiple': 'properties', 'in.a.single': 'object'});
let f = assign({
'[1][2][3]': "hello!",
'[1][2][1]': "a",
'[2][3][4]': "new_index"
});
console.log(a[3][4][5], '->', JSON.stringify(a));
console.log(b[3][4][5][6], '->', JSON.stringify(b));
console.log(c.you.can.use.object.as.well, '->', JSON.stringify(c));
console.log(d.or.mix[3].them[2], '->', JSON.stringify(d));
console.log(e.with.multiple, '->', e.in.a.single, '->', JSON.stringify(e));
console.log('f[1][2][3]:', f[1][2][3]);
console.log('f[1][2][1]:', f[1][2][1]);
console.log('f[2][3][4]:', f[2][3][4]);