![](/img/trans.png)
[英]See if an array contains all the number from other nested arrays with JavaScript?
[英]Listing All Its Atomic Arrays given in Nested Array in Javascript
我要求您提供有关以下问题的任何帮助。 谢谢!
假设您获得了一个带有三个插槽的嵌套数组。 例如,
var numbers = [1, [2,[3,4,5],[6,7,8]], [9,10,11]]
您可能会注意到,每个数组都有三个插槽,无论插槽是被整数占用还是另一个数组具有三个插槽都被占用。
[{"key1":1,"key2":"nothing","key3":[9,10,11]},{"key1":2,"key2":"nothing","key3":[6,7,8]},{"key1":9,"key2":"nothing","key3":11}]
我的目标是大致列出嵌套数组中给定的所有原子数组,然后将它们转换为关联数组。 例如,
[a,[b,c,d],e] -> [{key1: a, key2: X, key3: e}, {key1: b, key2: c, key3: d}]
如果数组的元素是另一个数组,则该元素的名称可能类似于“ X”。
var arr = new Array();
Array.prototype.node = function(){
if (this.length == 1){
arr.push({
key1: this[0],
})
}
else if (this.length == 2 ){
arr.push({
key1: this[0],
key2: this[1],
})
}
else if (this.length == 3){
arr.push({
key1: this[0],
key2: "nothing",
key3: this[2],
})
}
}
Array.prototype.mkk = function (){
switch(true){
case(!this[0].isArray): {this.node()}
case(this[1].length > 1): {this[1].node()}
case(this[2].length > 1): {this[2].node()}
}
return arr
}
function myFunction() {
var numbers = [1, [2,[3,[4,5,[]]], [4,[]]], [5,[]]]
//do something like ... JSON.stringify(numbers.mkk())
}
您可以使用此ES6函数:
function transform(arr) { return !Array.isArray(arr) ? arr : Object.assign(...Object.keys(arr).map ( (key, i) => ({ ['key' + (i+1)]: transform(arr[key]) }) )); } // Sample call const numbers = [1, [2,[3,4,5],[6,7,8]], [9,10,11]]; console.log(transform(numbers));
.as-console-wrapper { max-height: 100% !important; top: 0; }
我不会为此扩展Array对象原型。 它是一个过于具体的功能,实际上总体上不是很有用:
数组是对象,其属性是序号。 您要在此处将这些数字属性重命名为key
然后再key
该数字,从而放弃您首先拥有的Array功能。 考虑一下forEach
方法, length
属性, sort
方法等。 您放弃所有这些,只是为了拥有其中包含key
属性名称。 这似乎并没有那么有用。
您可以执行以下操作;
function flatIntoObjects(a){ return a.reduce((p,e,i) => Array.isArray(e) ? (p[0] = Object.assign(p[0], {["key"+ ++i]: "X"}), p.concat(flatIntoObjects(e))) : (p[0] = Object.assign(p[0], {["key"+ ++i]: e}), p), [{}]); } var numbers = [1, [2,[3,4,5],[6,7,8]], [9,10,11]]; console.log(flatIntoObjects(numbers));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.