我将比较JavaScript元素数组中的其他元素。如果元素相同,则必须为所有共同元素赋予相同的编号。如果元素不同,则必须为另一个元素中的所有非相同元素赋予一些不同的数字。
例如:
在这个数组中,“Number”是一个动态元素,它应该根据以下规则进行填充。
考虑Key1是第一个元素(位置+日期的组合)。如果数组中存在相同的Key1,则“Number”对于所有相同的Key1都是共同的。
在上面的例子中,{'LA','2017-12-01',1}具有相同的数字1。
{'NY','2017-12-01',2}具有数字2。而{'NY','2016-10-01',3}具有数字3,因为尽管位置相同但日期不同。
请查看下面的代码。
问题是,for循环正在迭代多次——它一直在多次比较相同的元素。我该如何解决这个问题。
例如:
Array structure = [{Location, Date, Number}]
array = [{ 'LA','2017-12-01',1},
{ 'LA','2017-12-01',1},
{ 'NY','2017-12-01',2},
{ 'NY','2016-10-01',3},
{ 'LA','2017-12-01',1},
{ 'LA','2017-12-01',1},
{ 'LA','2017-12-01',1}]
在这个数组中,“Number”是一个动态元素,它应该根据以下规则进行填充。
key1 = location + '-' +date;
考虑Key1是第一个元素(位置+日期的组合)。如果数组中存在相同的Key1,则“Number”对于所有相同的Key1都是共同的。
在上面的例子中,{'LA','2017-12-01',1}具有相同的数字1。
{'NY','2017-12-01',2}具有数字2。而{'NY','2016-10-01',3}具有数字3,因为尽管位置相同但日期不同。
请查看下面的代码。
var item = this.state.item;
var lines = item.order_items;
var count=1;
var key1;
var key2;
for(var i=0;i<lines.length;i++)
{
key1 = lines[i].location + '-' + lines[i].date;
for(var j=0;j<lines.length;j++)
{
key2 = lines[j].location + '-' + lines[j].date;
if( key1 === key2 )
{
lines[i].number=count;
this.setState({item:item});
}
else
{
count++;
lines[j].number=count;
this.setState({item:item});
}
}
}
问题是,for循环正在迭代多次——它一直在多次比较相同的元素。我该如何解决这个问题。
j<lines.length
到j<i
。 - vibhor1997a