对多维数组中的元素计数
Count elements in a multidimensional array
我得到了这个代码:
loadData : function(jsonArray) {
var id = $(this).attr("id");
for(var i in jsonArray) {
$("#"+id+" tbody").append('<tr class="entry-details page-1 entry-visible" id="entry-'+i+'"></tr>');
var header = {
1: "time",
2: "project",
3: "task"
}
var col = 1;
while(col <= jsonArray[i].length) {
$("#"+id+" tbody #entry-"+i).append("<td>"+jsonArray[i][header[col]]+"</td>")
col++
}}
它将接受一个JSON数组,看起来类似于下面的
{"1":{"project":"RobinsonMurphy","task":"Changing blog templates","time":"18'/07'/11 04:32PM"},"2":{"project":"Charli...
代码应该遍历行(它确实这样做了),然后遍历数据的列。
我面临的问题是为了将列数据放在正确的列中,我需要计算一行中返回多少条数据。我尝试了jsonArray[I]。长度,但是返回undefined
如有任何帮助,不胜感激
你根本没有任何数组,只有对象。
要计算对象中的项数,创建一个简单的函数:
function countInObject(obj) {
var count = 0;
// iterate over properties, increment if a non-prototype property
for(var key in obj) if(obj.hasOwnProperty(key)) count++;
return count;
}
现在,您可以调用countInObject(jsonArray[i])
像这样:
Object.size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
// Get the size of an object
var size = Object.size(myArray);
JavaScript对象的长度
看看那提琴:http://jsfiddle.net/Christophe/QFHC8/
键
for (var j in jsonArray[i]) {
不是
while (col <= jsonArray[i].length) {
jsonArray[i]。长度将无法工作,因为jsonArray[i]是一个字典而不是数组。您应该尝试这样做:
for(var key in jsonArray[i]) {
jsonArray[i][key]
}
我一直面临着同样的问题,我编写了一个函数,该函数在多维数组/对象组合中获得所有标量值。如果对象或数组为空,则假定它不是一个值,因此不将它们相加。
function countElements(obj) {
function sumSubelements(subObj, counter = 0) {
if (typeof subObj !== 'object') return 1; // in case we just sent a value
const ernation = Object.values(subObj);
for (const ipated of ernation) {
if (typeof ipated !== 'object') {
counter++;
continue;
}
counter += sumSubelements(ipated);
}
return counter;
}
return sumSubelements(obj);
}
let meBe = { a: [1, 2, 3, [[[{}]]]], b: [4, 5, { c: 6, d: 7, e: [8, 9] }, 10, 11], f: [12, 13], g: [] };
const itution = countElements(meBe);
console.log(itution); // 13
let tuce = [1,2];
console.log(countElements(tuce)); // 2
console.log(countElements(42)); // 1
或者如果你想在生产中使用它,你甚至可以考虑将它添加到Object原型中,像这样:
Object.defineProperty(Object.prototype, 'countElements', {
value: function () {
function sumSubelements(subObj, counter = 0) {
const subArray = Object.values(subObj);
for (const val of subArray) {
if (typeof val !== 'object') {
counter++;
continue;
}
counter += sumSubelements(val);
}
return counter;
}
return sumSubelements(this);
},
writable: true,
});
console.log(meBe.countElements()); // 13
console.log([meBe].countElements()); // 13; it also works with Arrays, as they are objects
相关文章:
- 在函数中添加数组元素的数值
- 访问JSON对象内部的数组元素
- 用于检查数组中是否存在元素的javascript自定义方法
- 在数组中的一个元素上设置多个值
- 从组件状态的数组中删除元素
- Mongoose-在更新中删除数组元素
- 从数组中删除元素的最佳方法是:javascript/jquery
- 数组中元素(字符串)的总和
- javascript数组元素是否知道其封闭数组
- 查找数组javascript中包含的元素类型
- 如何在javascript上向数组的对象添加新元素
- 如果数组仍在执行,async.forEach()将运行我添加到数组中的新元素
- 使用filter和map方法将数组中某些元素的第一个字母大写-JavaScript
- 一些元素没有从数组中删除
- JS.循环遍历多维数组,以计数元素在每列中的出现次数
- 将数组元素附加到FormData dos'不适用于Firefox 15
- 元素不会添加到Javascript数组中
- 如何从另一个带下划线的数组中筛选带元素的数组
- 如何将函数应用于两个数组的第 n 个元素(数组的数组)
- Js接受两个值之间的元素(数组)