jq数组连接

zhai斋
  • 95
var map=[
    ["12_0","12_1"],
    ["13_0","13_1","13_2"],
    ["14_0","14_1","14_2"]
];


一个二维数组里面,现在需要使数组中的三个数组里的值分别连接起来

实例:["12_0-13_0-14_0","12_1-13_1_14_1"]
    同组的不能连接,只能跟其他的连。
回复
阅读 1.9k
4 个回答
✓ 已被采纳

看你的结果,是将子数组对应下标的连接起来,有空缺则全部丢弃?

最短的子数组长度为n,则结果数组长度为n ?

如果是这样的话:

var map=[
      ["12_0","12_1"],
      ["13_0","13_1","13_2"],
      ["14_0","14_1","14_2"]
    ]
    // 1. 获取map元素中,最短的数组长度
    var length = Math.min(...map.map(item => item.length))
    // 2. 从0-n,依次连接map子数组中的第n个,直到n == length
    var result = new Array(length).fill(0).map((item, index) => {
      return map.map(arr => arr[index]).join('-')
    })
    console.log(result)
dahong
  • 21

先转置,再连接

var map=[
    ["12_0","12_1"],
    ["13_0","13_1","13_2"],
    ["14_0","14_1","14_2"]
]

// 二维数组转置
var arr = []
for (var i = 0; i < map.length; i++) {
    arr[i] = []
}
for (var j = 0; j < map.length; j++) {
    for (var k = 0; k < map[j].length; k++) {
        arr[k][j] = map[j][k]
    }
}

// 连接
for (var a of arr) {
    var str = a.join('-')
    console.log(str)
}
      var map=[
    ["12_0","12_1"],
    ["13_0","13_1","13_2"],
    ["14_0","14_1","14_2"]
];
var myarr = [];
for(i in map){
myarr.push([]);
}
aaa(map);
function aaa(arr){
    arr.map((s,i)=>{
        if(Array.isArray(s)){   
            return aaa(s);
        }
        myarr[i].push(s);        
    });    
}
for(i in myarr){
   myarr[i] = myarr[i].join('-');
}
console.log(myarr);
小蚊酱
  • 4.8k

这个问题虽然显示已经解决了,不过我也提下自己的方案吧。
我是用递归的方式来把map中每一项都拿到,这样就跟map数组的长度没关系了,任意长度的数组都能获取到所有的组合:

var map=[
    ["12_0","12_1"],
    ["13_0","13_1","13_2"],
    ["14_0","14_1","14_2"]
  ]
function getMapResult(params){
    // 递归方法
    let ss = (_params, step)=>{
        let item = _params[step],
            result = [],
            res = [];
        
        if( step<_params.length-1 ){
            res = ss(_params, ++step);
        }

        item.map(val=>{
            if(res.length){
                res.forEach(_=>{
                    result.push( val+'-'+_ );
                })
            }else{
                result.push( val );
            }
        })
        
        return result;
    }
    
    return ss(params, 0);
}

console.log( getMapResult(map) );

getMapResult方法中传入的参数,可以是任意长度的二维数组,如:

var arr = [
    [1, 2, 3, 4],
    [5],
    [6,7,8],
    [9, 10, 11, 12],
    [14, 15]
];

console.log( getMapResult(arr) ); // 输出96种所的可能

还有一种就是循环的方式:

function getMapResult(params){
    let result = [];

    params.map(item=>{
        let ss = [];
        item.map(_=>{
            if(result.length){
                result.map(i=>ss.push(i+'-'+_));
            }else{
                ss.push(_);
            }
        })
        result = ss;
    })
    return result;
}

执行:

var arr = [
    [1, 2, 3, 4],
    [5],
    [6,7,8],
    [9, 10, 11, 12],
    [14, 15]
]
getMapResult(arr);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏