這是我的第一個堆棧過低的問題:JavaScript數組複製和值
我得到這個數組[['a',12],['a',21],['b',1],['c',4],['c',5]]
,我想這樣的[['a',33],['b',1],['c',9]]
任何輸出它可以給我一個伸出援助之手?
這是我的第一個堆棧過低的問題:JavaScript數組複製和值
我得到這個數組[['a',12],['a',21],['b',1],['c',4],['c',5]]
,我想這樣的[['a',33],['b',1],['c',9]]
任何輸出它可以給我一個伸出援助之手?
您可以使用散列表引用具有相同內部數組的第一項的相同結果數組。
Array#forEach
循環數組並查看該字符串是否已存在於散列表中。如果不是,則分配內部數組的副本並將其推送到結果中,然後退出回調。
如果找到,則將內部數組的值添加到散列表的數組中。
var data = [['a', 12], ['a', 21], ['b', 1], ['c', 4], ['c', 5]],
hash = Object.create(null), // generate object without prototypes
result = [];
data.forEach(function (a) {
if (!(a[0] in hash)) {
hash[a[0]] = a.slice();
result.push(hash[a[0]]);
return;
}
hash[a[0]][1] += a[1];
});
console.log(result);
console.log(hash); // to show how it works
.as-console-wrapper { max-height: 100% !important; top: 0; }
使用Array.reduce:
var data = [['a', 12], ['a', 21], ['b', 1], ['c', 4], ['c', 5]];
var result = data.reduce(function (a, b, i) {
const c = a.filter(function (ax) { return ax[0] === b[0] });
c.length > 0 ? c[0][1] = c[0][1] + b[1] : a.push(b);
return a;
}, []);
console.log(result);
// [[a, 33], [b, 1], [c, 9]]
但第一陣列沒有'33'或'它9'那麼你如何從一個數組希望輸出的東西那不存在.. – NewToJS
問題描述了獲得該結果所需的步驟,還是編碼這些步驟的問題?我假設你想要將所有數字相同的字母相加。 – Shilly
@NewToJS:很明顯,它基於第一個數組項匹配來總結子數組中第二個數組項的值。 –