繁体   English   中英

列出在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM