gpt4 book ai didi

javascript - 使用 push() 方法时如何避免二维数组中的重复项?

转载 作者:行者123 更新时间:2023-11-29 18:49:24 25 4
gpt4 key购买 nike

我有一个简单的代码,它接收一个二维数组(使用 getValues 从 Google 表格获得的送货报告)作为输入,根据特定条件对项目进行计数,并将这些计数推送到另一个数组。

二维输入数组(交付报告)中的每个元素都由 vendorID 组成,其中包含有关两种可能的交付项目类型的信息。交付的每个项目都是一个单独的元素(报告中的单独行),即使对于相同的 vendor ID 也是如此。

vendorID1 - 元素 - 元素信息
vendorID1 - 项目 - 项目信息
vendorID1 - 项目 - 项目信息
vendorID2 - 元素 - 元素信息
vendorID2 - 元素 - 元素信息
...等等。

我的代码通过使用外部 For 循环从报告 (array[0][0]) 中读取第一个 vendorID 来工作,然后遍历数组以使用内部 For 循环寻找匹配的 vendorIDs - 如果满足 Condition1 increment Item1加 1,如果满足条件 2,则将 Item2 加 1。然后 push() [vendorID, Item1_count, Item2_count] 到另一个数组中。

我遇到的问题是外循环的每次迭代最终都会将多个重复记录插入最终数组,因为输入数组(交付报告)内的每个 vendor ID 几乎总是有多个条目对应于每件商品都已交付。

我需要找到一种方法来跳过或忽略已经计算过的 vendor ID,以避免将相同的数据插入最终数组。

最初我的代码是将数据推送到一维数组中,我能够使用 indexOf 检查是否已推送 vendor ID,但我更改了代码以创建二维数组,而不是为了更好的数据组织和 indexOf 不再作品。我想出了另一种解决方法,但我不知道这是否是最佳解决方案,因为我是编码新手。我的另一个解决方案是创建另一个数组来保存已经计算过的 vendor ID,然后在该数组上使用 indexOf 来防止推送重复条目。

如有任何帮助,我们将不胜感激!

代码如下:

// Iterate through the array to get first/next vendorID on the list

for (var i=0; i<delivery_data.length; i++) {

// Assign vendorID from input array (delivery report) to a variable
var vendor_id = delivery_data[i][0];

// Declare a variable to eventually hold vendorID counted last
var last_counted_vendor;

// Set item counts to 0

var item1_count = 0;
var item2_count = 0;

// Execute inner For loop only if
// vendorID is not the same as previous iteration
if (vendor_id != last_counted_vendor) {

// I think j=i works and avoids searching from the
// beginning of the array every singe time
for (var j=i; j<delivery_data.length; j++) {

// If vendorID matches and condition1 is met, increment item1
if (vendor_id == delivery_data[j][0] && condition1) {
item1_count++;
}
// If vendorID matches and condition2 is met, increment item2
else if (vendor_id == delivery_data[j][0] && condition2) {
item2_count++;
}
}

// Assign vendorID just counted to a variable
last_counted_vendor = vendor_id;
// Push vendorID and item counts to the final array
count_data.push([vendor_id,item1_count,item2_count]);
}
}

最佳答案

最简单的方法是找到目前已找到的 vendor_idSet,如果 vendor_id 发现已经包含在 Set 中:

const vendorIds = new Set();
for (var i=0; i<delivery_data.length; i++) {
const vendor_id = delivery_data[i][0];
if (vendorIds.has(vendor_id)) continue;
vendorIds.add(vendor_id);
// etc

关于javascript - 使用 push() 方法时如何避免二维数组中的重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51851531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com