如何将数字存储在数组中?

时间:2019-06-07 15:08:27

标签: javascript arrays loops

我构建了一个程序,该程序检查两个不同数组中是否存在两个公共数字,然后记录这些数字。我能够使用一个简单的for循环来做到这一点,该循环通过第一个数组的每个元素,并检查第二个数组中是否有相等的元素。数组中每个相同的元素都存储在名为“ commonNumbers”的第三个数组中,我在程序结尾处进行了记录。

const firstNumbers = [12, 45, 6, 78] 
const secondNumbers = [6, 7, 12, 45] 
let commonNumbers = []

for (let i = 0; i < firstNumbers.length; i++) {
    for (let j = 0; j < secondNumbers.length; j++) {
        if (firstNumbers[i] === secondNumbers[j]) {
            commonNumbers += secondNumbers[j]
        }
    } }

console.log(commonNumbers)

此示例的结果是以下内容:

12456
[Finished in 0.2s]

我的问题是关于结果。我可以看到程序实际上在数组(12、45、6)中运行并记录了相同的元素,但是我无法弄清楚为什么“ commonNumbers”以这样的方式存储结果,即数字之间没有空格。

我想清楚地看到每个数字。

例如,如果我调用“ commonNumbers”的第一个元素(索引为0): commonNumbers[0]我将得到的结果不是预期的“ 12”,而是“ 1”。 如果我说:commonNumbers[2],也会发生同样的事情。结果将是“ 4”,而不是“ 6”。

显然“ commonNumbers”数组以我期望的不同方式存储了元素。如何使用这种“存储”方法解决此问题?

3 个答案:

答案 0 :(得分:2)

这是因为+=在您的数组上隐式转换为字符串,如下面的示例所示,其中 Number 是总计为 Array

console.log(typeof([] + 1));

只需使用舒适的.pushread more about push here)数组方法即可添加元素:

const firstNumbers = [12, 45, 6, 78] 
const secondNumbers = [6, 7, 12, 45] 
let commonNumbers = []

for (let i = 0; i < firstNumbers.length; i++) {
    for (let j = 0; j < secondNumbers.length; j++) {
        if (firstNumbers[i] === secondNumbers[j]) {
            commonNumbers.push(secondNumbers[j]);
        }
    } }

console.log(commonNumbers)

(最后)请注意,还有其他几种方法可以完成任务,最明智的选择是filter。您可能还需要注意最终的重复项,因为如果您的输入数组具有两个相同的数字,则commonsNumber结果将包含这两个数字,这可能是意外的。

试图同时处理重复项并循环较短数组的“确定性”聪明解决方案将是这样的:

// Inputs with duplicates, and longer array on second case.
const firstNumbers = [12, 45, 6, 78, 12, 12, 6, 45]; 
const secondNumbers = [6, 7, 12, 45, 45, 45, 12, 6, 99, 19, 5912, 9419, 1, 4, 8, 6, 52, 45];

// Performance: look for duplicates starting from the shortest array. Also, make a set to remove duplicate items.
const [shortestArray, longestArray] = firstNumbers.length < secondNumbers.length ? [firstNumbers, secondNumbers] : [secondNumbers, firstNumbers];


// Remove duplicates.
const dedupes = [...new Set(shortestArray)];

// Find commomn items using filter.
const commons = dedupes.filter(i => longestArray.indexOf(i) > -1);
console.log('commons is', commons);

别误会我,解决方案很好,只是想在样板中添加“内容”,以照顾最终的其他情况。

答案 1 :(得分:0)

const firstNumbers = [12, 45, 6, 78] 
const secondNumbers = [6, 7, 12, 45] 
let commonNumbers = []

for (let i = 0; i < firstNumbers.length; i++) {
    for (let j = 0; j < secondNumbers.length; j++) {
        if (firstNumbers[i] === secondNumbers[j]) {
            commonNumbers.push(secondNumbers[j])
        }
    } }

push方法将值附加到数组。

答案 2 :(得分:0)

您似乎正在寻找array.prototype.pushmdn)。例如:

const firstNumbers = [12, 45, 6, 78] 
const secondNumbers = [6, 7, 12, 45] 
let commonNumbers = []

for (let i = 0; i < firstNumbers.length; i++)
    for (let j = 0; j < secondNumbers.length; j++)
        if (firstNumbers[i] === secondNumbers[j])
            commonNumbers.push(secondNumbers[j]);
            
console.log(commonNumbers); // as an array
console.log(commonNumbers.join(', '));

  

为什么“ commonNumbers”以这样的方式存储结果,即数字之间没有空格。

+运算符将尝试将其操作数强制转换为兼容类型。在这种情况下,这是一个字符串,其中空数组[]被强制转换为空字符串'',数字3被强制转换为相应的字符串'3'。例如。 [] + 3是字符串'3'

console.log([], typeof []);
console.log(3, typeof 3);
console.log([] + 3, typeof ([] + 3));