将2D数组转换为稀疏数组数组

时间:2016-12-13 19:19:39

标签: javascript

我有一个x=[[3,1],[2,2]]数组,我希望将其转换为x[3][1]=1x[2][2]=1。该代码也适用于较长的数组,如x=[[3,1],[2,12],[3,3]]

5 个答案:

答案 0 :(得分:1)

假设你接受两个输入:pos0pos1

for (i in x)  
    if (x[i][0] == pos0 && x[i][1] == pos1) {
        // Do stuff
    }

所以它基本上检查每个索引

答案 1 :(得分:0)

如果没有,您可以迭代并创建一个新数组。然后将值赋给给定的索引。

此解决方案为结果采用了一个新数组。

var x = [[3, 1], [2, 12], [3, 3]],
    result = [];

x.forEach(function (a) {
    result[a[0]] = result[a[0]] || [];
    result[a[0]][a[1]] = 1;
});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:0)

您可以执行以下操作;

var x = [[3,1],[2,12],[3,3]],
    r = x.reduce((p,c) => (p[c[0]] ? p[c[0]][c[1]] = 1
                                   : p[c[0]] = Array.from({[c[1]]: 1, length: c[1]+1}),
                           p),[]);
console.log(r);

答案 3 :(得分:0)

ModelName.execute_sql("select address,phone,email,services from branches as b, workspaces as w 
    where b.workspace_id = w.id and w.name= ?", workspace_name)

输出:

const x = [[3,1], [2,2]]

console.log('x =', x)

// Initialize 1st dimension array
const y = []
for (let i in x) {
  // Initialize the 2nd dimension array if not exist
  y[x[i][0]] = y[x[i][0]] || []
  // Assign the value to the sparse array
  y[x[i][0]][x[i][1]] = 1
}

console.log('y =', y)

答案 4 :(得分:0)

您可以使用array#reduce遍历数组并检查数组是否存在与第一个值相对应,以防它未使用[]进行初始化,然后将值赋给该索引。

var x=[[3,1],[2,12],[3,3]];
var result = x.reduce((r,[a,b]) => {
  r[a] = r[a] || [];
  r[a][b] = 1;
  return r;
},[]);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }