添加以前的数组之和 - javascript

时间:2015-06-10 22:12:54

标签: javascript arrays

在多维数组中,如何添加一个新维度,该维度是其他维度之一的所有先前值的总和?

我有什么:

var myarray = [[5,"a"],[10,"a"],[3,"a"],[2,"a"]];

我想要的是什么:

var newArray = [[5,"a",5],[10,"a",15],[3,"a",18],[2,"a",20]];

我想转this example(第二个答案,第二个代码块):

var myarray = [5, 10, 3, 2];

var result = myarray.reduce(function(r, a) {
  if (r.length > 0)
    a += r[r.length - 1];
  r.push(a);
  return r;
}, []);

// [5, 15, 18, 20]

并像这样应用:

var myarray = [[5,"a"],[10,"a"],[3,"a"],[2,"a"]];

var result = myarray.reduce(function(r, a) {
  if (r.length > 0)
    a += r[0][r.length - 1];
  r[2].push(a);
  return r;
}, []);

// [[5,"a",5],[10,"a",15],[3,"a",18],[2,"a",20]];

但我找不到一种有效的方法来分离出第一个值,以便在其上运行reduce。我试过了foreach,但是没有返回数组:

var firstValue = myarray.forEach(function(value, index) {
console.log(value[0]);
})

所以,我正在考虑将foreach输出转换成一个数组以某种方式进行操作,然后将其推回。但它看起来非常复杂。有人能指出我正确的方向吗?

感谢。

2 个答案:

答案 0 :(得分:1)

为了减少数组并且只从每个数组中提取第一个元素,实际上你需要使用foreach循环构建一个数组。

在循环外创建一个数组,并使用array.push(value)构建另一个数组。

var firstValues = [];
myarray.forEach(function(value, index) {
    firstValues.push(value);
});

我的首选解决方案:

由于您已经在数组中循环,因此您可以在一个循环中执行大量逻辑。

var currentSum = 0;
myarray.forEach(function(value, index) {
    currentSum += value[0]; //add to the running sum
    value.push(currentSum); //append the running sum to the end of this inner array
});

这是demo via jsfiddle

答案 1 :(得分:1)

一个简单的for循环应该这样做

if (strpos($row['links'],'tvguide') !== false) {
echo 'tvguide found';
}

Fiddle link