如果条件满足,则将值从一个数组复制到另一个数组

时间:2018-06-11 12:44:16

标签: javascript arrays

我有一个矩阵,大小可能不同。但就目前而言,让我们说它是一个6X6矩阵。它包含所有索引的值,其中一些值可以为0.

说矩阵看起来像这样:

var half_MW = [
    [0,1,1,0,0,0],
    [1,0,1,0,0,0],
    [1,1,0,0,0,0],
    [0,0,0,0,1,1],
    [0,0,0,1,0,1],
    [0,0,0,1,1,0]]

现在我要创建另一个数组(让我们称之为data),并仅复制{0}中不具有0的值(即(0,0)= 0,而且(0,3)= 0等。

我不确定的是,如何创建我称之为half_MW的数组。

这是我的尝试

data

我得到的结果是复制了数据/值,但有些索引包含0,这是我不想要的。实际上, var half_MW = ... (values shown above) var data = []; for(i = 0; i < 6; ++i) { var dataCols = []; for(j = 0; j < 6; ++j) { if(half_MW[i][j] != 0) { dataCols[i] = half_MW[i]; dataCols[j] = half_MW[j]; } } data[i] = dataCols; 数组不应该是6x6数组,它应该更小,因为来自data数组的包含0的索引应该被省略。

3 个答案:

答案 0 :(得分:2)

您的代码无效,因为您在内部循环中缺少dataCols.push(half_MW[i][j]);。改变它并且它起作用:

&#13;
&#13;
var half_MW = [
    [0,1,1,0,0,0],
    [1,0,1,0,0,0],
    [1,1,0,0,0,0],
    [0,0,0,0,1,1],
    [0,0,0,1,0,1],
    [0,0,0,1,1,0]];
var data = [];

for(i = 0; i < half_MW.length; ++i) {
  var dataCols = [];
  for(j = 0; j < half_MW[0].length; ++j) {
    if(half_MW[i][j] != 0) {
      dataCols.push(half_MW[i][j]);
    }     
  }
  data[i] = dataCols;
}
console.log(data);
&#13;
&#13;
&#13;

通过对外循环使用half_MW.length,对内循环使用half_MW[0].length,也可以使循环条件更具动态性。

答案 1 :(得分:2)

您可以使用Boolean映射过滤作为回调。

&#13;
&#13;
var half_MW = [[0, 0, 0, 0, 0, 0], [1, 0, 1, 0, 0, 0], [1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1], [0, 0, 0, 1, 0, 1], [0, 0, 0, 1, 1, 0]],
    result = half_MW
        .map(a => a.filter(Boolean))
        .filter(a => a.length);

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

答案 2 :(得分:1)

我会使用map循环数组并在filter条件输出后返回它们。

我在这种情况下看起来你想要删除所有0,如果不是pliss注释,那么我可以编辑

希望这会有所帮助:&gt;

&#13;
&#13;
var half_MW = [[0,1,1,0,0,0],[1,0,1,0,0,0],[1,1,0,0,0,0],[0,0,0,0,1,1],[0,0,0,1,0,1],[0,0,0,1,1,0]];

var data = half_MW.map(m=>{
  return m.filter(c=> c!=0)
})

console.log(data)
&#13;
&#13;
&#13;