如何在javascript

时间:2018-01-29 10:09:58

标签: javascript arrays

我写了这段代码

var items = [
  [1, 2],
  [3, 4],
  [5, 6]
];

function listiteration(list, fromrows, torows, col) {

  var newl = list; //making a copy of list
  var iterla = [];
  for (i = fromrows; i <= torows; i++) {
    iterla[i] = [];
    for (j = col; j <= col; j++) {
      iterla[i][j] = newl[i][j];
    }
  }
  return iterla;
}
console.log(listiteration(items, 1, 2, 1));

结果应该是

[[4],[6]]

但是

[ <1 empty item>, [ <1 empty item>, 4 ], [ <1 empty item>, 6 ] ]

如何解决这个问题

6 个答案:

答案 0 :(得分:1)

你不需要第二个for循环。只需创建一个新列表,迭代行并使用push函数将当前行col - 元素添加到数组中。

&#13;
&#13;
const items = [[1, 2], [3, 4], [5, 6]];

function listiteration(list, fromRows, toRows, col) {

  const newList = [];
  
  for (let i = fromRows; i <= toRows; i++) {
     newList.push([list[i][col]]);
  }
  
  return newList;
}

const newItems = listiteration(items, 1, 2, 1);
console.log(newItems);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以使用slice()map()方法执行此操作。

var items = [[1, 2], [3, 4], [5, 6]];
function f(list, start, end, col) {
  return list.slice(start, end + 1).map(e => [e[col]])
}

const result = f(items, 1, 2, 1)
console.log(result)

您还可以添加数组检查。

var items = [[1, 2], 'a', [5, 6], [1, 2]];
function f(list, start, end, col) {
  return list
    .slice(start, end + 1)
    .map(e => Array.isArray(e) ? [e[col]] : e)
}

const result = f(items, 1, 3, 1)
console.log(result)

答案 2 :(得分:0)

更简单的方法

&#13;
&#13;
var items = [[1, 2], [3, 4], [5, 6]];

function listiteration(list, fromrows, torows, col) {
    var ret = [];
    for (var i = fromrows; i <= torows; i++) {
        ret.push(list[i][col]);
    }
    return ret;
}

console.log(listiteration(items, 1, 2, 1));
&#13;
&#13;
&#13;

答案 3 :(得分:0)

这将是解决方案

correlation = scipy.stats.pearsonr(<new time series>, <centroid>)

答案 4 :(得分:0)

其他答案给了你不同的方法,这很好。

但出于学习目的,我已经修复了你所做的那个。

你忘了做的就是将数组偏移回零..

iterla[i - fromrows][j - col] = newl[i][j];

以下示例..

var items = [
  [1, 2],
  [3, 4],
  [5, 6]
];

function listiteration(list, fromrows, torows, col) {

  var newl = list; //making a copy of list
  var iterla = [];
  for (i = fromrows; i <= torows; i++) {
    iterla[i - fromrows] = [];
    for (j = col; j <= col; j++) {
      iterla[i - fromrows][j - col] = newl[i][j];
    }
  }
  return iterla;
}
console.log(listiteration(items, 1, 2, 1));

答案 5 :(得分:0)

var items = [
  [1, 2],
  [3, 4],
  [5, 6]
];

function listiteration(list, fromrows, torows, col) {
    var newArr    = list.splice(fromrows, torows);
    var newResult =[];
    newArr.map(value=>{
        newResult.push([value[col]]);
    });
    return newResult;
}

console.log(listiteration(items, 1, 2, 1));