要件は「0 埋め値の削除」ですが、逆転の発想で 値に 0 を含まない時に残すコードにするとすっきりするように思います。
JavaScript
1'use strict';
2function sample1 (array) {
3 return array.filter(function (array) {
4 var i = array.length;
5
6 while (--i) {
7 if (array[i] !== 0) {
8 return true;
9 }
10 }
11
12 return false;
13 });
14}
15
16function sample2 (array) {
17 return array.filter(function (array) {
18 return array.join() !== String(array[0]) + ',0,0,0,0,0,0,0,0';
19 });
20}
21
22var array = [
23 ['Month','メニュー(101)','(102)','(103)','(201)','(202)','(203)','(204)','(301)'],
24 ['this',0,0,0,0,0,0,0,0],
25 ['one',16,8,1,6,0,0,0,1],
26 ['two',76,44,22,40,16,12,1,8],
27 ['three',59,6,5,15,2,4,2,4],
28 ['four',26,0,0,0,0,0,0,5],
29 ['five',59,0,0,0,0,0,0,18],
30 ['six',0,0,0,0,0,0,0,0],
31 ['seven',0,0,0,0,0,0,0,0]
32 ];
33
34console.log(JSON.stringify(sample1(array))); // [["Month","メニュー(101)","(102)","(103)","(201)","(202)","(203)","(204)","(301)"],["one",16,8,1,6,0,0,0,1],["two",76,44,22,40,16,12,1,8],["three",59,6,5,15,2,4,2,4],["four",26,0,0,0,0,0,0,5],["five",59,0,0,0,0,0,0,18]]
35console.log(JSON.stringify(sample2(array))); // [["Month","メニュー(101)","(102)","(103)","(201)","(202)","(203)","(204)","(301)"],["one",16,8,1,6,0,0,0,1],["two",76,44,22,40,16,12,1,8],["three",59,6,5,15,2,4,2,4],["four",26,0,0,0,0,0,0,5],["five",59,0,0,0,0,0,0,18]]
sample2()
は String
型に変換して評価するのでプリミティブ値外の値を含んでいると厳密ではありません。
通常は sample1()
を使う事になると思います。
(index 0 の要素を残す)
「最初の行に項目名となるデータがある』との事ですが。見たところ0埋めデータではないようなので特別措置はしていません。
必要なら、array.shift()
で退避させてください。
Re: Satochan24 さん