我有一個數組將取n個值,但是這些值將被添加到不同的索引在不同的時間。但是,我需要在特定時間的陣列長度。稀疏數組的長度
案例1
var a = [1,2,3,3,4]
a.length //Returns 5 - OK
案例2
var a =[]
a[20] = 2
a.length //Returns 21 but I would like it to return 1
如何獲得長度1
爲情況下2?
我有一個數組將取n個值,但是這些值將被添加到不同的索引在不同的時間。但是,我需要在特定時間的陣列長度。稀疏數組的長度
案例1
var a = [1,2,3,3,4]
a.length //Returns 5 - OK
案例2
var a =[]
a[20] = 2
a.length //Returns 21 but I would like it to return 1
如何獲得長度1
爲情況下2?
如果您可以使用underscore或lodash。你可以試試這樣的
var arrLen = _.compact(youArr).length;
如果你想使用純粹的JS ..你需要編寫簡單的功能。這將計算不等於假的元素數量。
var len = 0;
arr.forEach(function(el){
if (el) {count++;}
});
console.log(len);
希望這會有所幫助。
你真棒。我正在用'lodash'而不是'underscore'。謝謝! –
如果您需要計數未未定義的元素個數:
var a = [];
a[20] = 2;
// count number of elements in a that are not undefined
var count = a.filter(x => typeof x !== 'undefined').length;
console.log(count); // prints 1
或者,也可以不用創建一個新的數組來查看它有多少個元素,只需使用'.reduce()'返回一個數字。 – vlaz
您可以用Array#forEach
計算的項目。
forEach()
執行提供的回調一次本升序對數組中的每個元素。對於已刪除或未初始化的索引屬性(即在稀疏數組上),不會調用它。
var a = [1, 2, 3, 3, 4];
console.log(a.length); // 5
a[20] = 2;
console.log(a.length); // 21
var length = 0;
a.forEach(function() { length++; });
console.log(length); // 6
我認爲像這樣將滿足您的需求,雖然目前還不清楚爲什麼你會放一個元素到第20位。
function dynlength(array) {
var length = 0;
for (var i = 0; i < array.length; i++)
if (array[i] !== undefined) length++;
return length;
}
first var a = []; 到陣列中元素的返回長度爲
當你說一個[20] ='x';
陣列實際上得到21元(以設置爲你的價值20元),初始化並記住21元素的數組中數
,如果你想自定義值嘗試在循環迭代爲
var count=0;
for(var i=0;i<a.length;i++)
{
if(a[i]!=undefined)
{
count++;
}
}
console.log(count);
使用arr.length屬性將返回包含'洞'的總長度
您可以使用forEach()方法跳過數組中的孔。
var arr1 = [];
var count = 0;
arr1[20] = 2;
alert(arr1.length);// this will always return including 'holes'
arr1.forEach(function(ele, i) { //this will skip the holes and will take real values into account
count++;
});
alert(count);
您還可以檢查每個索引中的「未定義」值並添加到count變量中。但要小心使用'未定義'來清空數組中的'洞'。
很多問題的答案建議要麼通過數組循環或創建一個新的數組,然後計算該(什麼_.compact
一樣)。我認爲所有這些都是錯誤的方法,因爲使用.reduce
使得這完全無關緊要。
var arr = [];
arr[7] = 1;
arr[17] = 2
arr[33] = 0;
arr[9001] = 4
var count = arr.reduce(x => x+1, 0);
console.log(count);
它是一條線或19個字節的代碼來做到這一點。這是因爲.reduce
將而不是經過數組中的空白點,因此它只會訪問顯式填充的indeces。然後就算這些。
要知道,如果你有明確設置爲undefined
任何的indeces,他們所證明仍然算作填充。所以,如果是這樣的話,那麼你就需要在回調考慮到它,例如
var arr = [];
arr[17] = 2
arr[42] = undefined
var count = arr.reduce(x => x+1, 0);
console.log(count);
var filteredCount = arr.reduce((x, value) => typeof value !== "undefined" ? x+1 : x, 0);
console.log(filteredCount);
可以算陣列的「鑰匙」(即人口指數):
Object.keys(arr).length
讓它返回1的唯一方法是在其中只有1個元素...'a [0] = 2'或者你是否想要'length'返回數字具有價值的元素? – Archer
爲什麼你想把元素放在第20位?如果沒有,你可以‘我這樣做,因爲這是可能的‘’*這聽起來有些不可思議使用'推」 @PraneshRavi *推動要素英寸 – SachiDangalla
’! –