在javascript中使用数组对象键中的条件基循环和创建编号
嗨,我正在尝试根据数组对象键条件创建这种循环模式, 如果'o'具有't',我们将从对象中的'n'起点开始索引,否则我们将从主计数器继续编号 数据数组:在javascript中使用数组对象键中的条件基循环和创建编号,javascript,arrays,typescript,ecmascript-5,Javascript,Arrays,Typescript,Ecmascript 5,嗨,我正在尝试根据数组对象键条件创建这种循环模式, 如果'o'具有't',我们将从对象中的'n'起点开始索引,否则我们将从主计数器继续编号 数据数组: let data = [ {o:[],n:1}, //empty o could be our main counter this could also be dynamic or any number to start {o:[],n:1}, {o:['t'],n:1}, //has t number start from n
let data = [
{o:[],n:1}, //empty o could be our main counter this could also be dynamic or any number to start
{o:[],n:1},
{o:['t'],n:1}, //has t number start from n
{o:['t'],n:1},
{o:[],n:1}, // continue the last count of main counter
{o:[],n:1},
{o:['t'],n:1},
{o:[],n:1},
{o:[],n:1},
{o:['t'],n:5},
{o:['t'],n:5},
{o:['t'],n:5},
{o:[],n:1},
]
recount(data){
for (var i = 0; i < data.length; i++) {
//code here
//new can also modify data[i].n
console.log(**numbering**)
}
}
那么当我运行此代码时:
let data = [
{o:[],n:1}, //empty o could be our main counter this could also be dynamic or any number to start
{o:[],n:1},
{o:['t'],n:1}, //has t number start from n
{o:['t'],n:1},
{o:[],n:1}, // continue the last count of main counter
{o:[],n:1},
{o:['t'],n:1},
{o:[],n:1},
{o:[],n:1},
{o:['t'],n:5},
{o:['t'],n:5},
{o:['t'],n:5},
{o:[],n:1},
]
recount(data){
for (var i = 0; i < data.length; i++) {
//code here
//new can also modify data[i].n
console.log(**numbering**)
}
}
感谢您的帮助这是一个直接循环,但需要保留两个计数器:
- 一个是普通计数器,用于
不包含o
的项目,我们只是每次递增它“t”
- 另一个是当
包含o
时要添加到“t”
的偏移量。它从零开始。n
- 对于与条件匹配的每个连续项,它将增加1
- 如果我们停止遇到符合条件的项,它将重置回零
var数据=[
{o:[],n:1},//空的o可以是我们的主计数器这也可以是动态的,也可以是任何开始的数字
{o:[],n:1},
{o:['t'],n:1},//t编号从n开始
{o:['t'],n:1},
{o:[],n:1},//继续主计数器的最后一次计数
{o:[],n:1},
{o:['t'],n:1},
{o:[],n:1},
{o:[],n:1},
{o:['t'],n:5},
{o:['t'],n:5},
{o:['t'],n:5},
{o:[],n:1},
]
功能重新计数(数据){
var计数器=1;
var offsetT=0;
对于(变量i=0;i 控制台日志(数据)代码>这是一个直接的循环,但需要保留两个计数器:
- 一个是普通计数器,用于
o
不包含“t”
的项目,我们只是每次递增它
- 另一个是当
o
包含“t”
时要添加到n
的偏移量。它从零开始。
- 对于与条件匹配的每个连续项,它将增加1
- 如果我们停止遇到符合条件的项,它将重置回零
仅使用ES5,这可能如下所示:
var数据=[
{o:[],n:1},//空的o可以是我们的主计数器这也可以是动态的,也可以是任何开始的数字
{o:[],n:1},
{o:['t'],n:1},//t编号从n开始
{o:['t'],n:1},
{o:[],n:1},//继续主计数器的最后一次计数
{o:[],n:1},
{o:['t'],n:1},
{o:[],n:1},
{o:[],n:1},
{o:['t'],n:5},
{o:['t'],n:5},
{o:['t'],n:5},
{o:[],n:1},
]
功能重新计数(数据){
var计数器=1;
var offsetT=0;
对于(变量i=0;i 控制台日志(数据)代码>只是一个简单的算法,如果您需要帮助来理解它,请告诉我,我可以向您解释您不理解的内容
let数据=[
{o:[],n:1},//空的o可以是我们的主计数器这也可以是动态的,也可以是任何开始的数字
{o:[],n:1},
{o:[“t”],n:1},//t编号从n开始
{o:[“t”],n:1},
{o:[],n:1},//继续主计数器的最后一次计数
{o:[],n:1},
{o:[“t”],n:1},
{o:[],n:1},
{o:[],n:1},
{o:[“t”],n:5},
{o:[“t”],n:5},
{o:[“t”],n:5},
{o:[],n:1},
];
设编号=1;
让我们来看看数字;
让前一个=假;
功能重新计数(数据){
对于(变量i=0;i
只是一个简单的算法,如果您需要帮助理解它,请告诉我,我可以向您解释您不理解的内容
let数据=[
{o:[],n:1},//空的o可以是我们的主计数器这也可以是动态的,也可以是任何开始的数字
{o:[],n:1},
{o:[“t”],n:1},//t编号从n开始
{o:[“t”],n:1},
{o:[],n:1},//继续主计数器的最后一次计数
{o:[],n:1},
{o:[“t”],n:1},
{o:[],n:1},
{o:[],n:1},
{o:[“t”],n:5},
{o:[“t”],n:5},
{o:[“t”],n:5},
{o:[],n:1},
];
设编号=1;
让我们来看看数字;
让前一个=假;
功能重新计数(数据){
对于(变量i=0;i
您必须使用es5吗?我看到您使用的是let
,它是es6feature@NickParsons还有速记法符号重新计数(数据)
,它也是ES6。是的,但它是可选的,我们可以使用它,也可以不使用它。你必须使用es5吗?我看到您使用的是let
,它是es6feature@NickParsons还有速记法符号重新计数(数据)
,也是ES6。是的,但它是可选的,我们可以使用它,也可以不使用它。谢谢@VLAZ:)它几乎可以工作了。但是起始数字总是1。在数据的索引0处。。这可能是动态的