Как я могу хранить числа в массивах? - PullRequest
1 голос
/ 07 июня 2019

Я создал программу, которая проверяет наличие двух общих чисел в двух разных массивах, а затем записывает эти числа. Я смог сделать это, используя простой цикл 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)

Результат для этого примера: seguent:

12456
[Finished in 0.2s]

Мой вопрос о результате. Я вижу, что программа действительно работала и регистрировала один и тот же элемент в массивах (12, 45, 6), но я не могу понять, почему «commonNumbers» сохранил результат таким образом, что между числами нет пробелов ,

Я бы хотел четко видеть каждое число.

Например, если я назову первый элемент "commonNumbers" (с индексом 0): commonNumbers[0] результат, который я получу, будет не «12», как ожидалось, а «1». То же самое произойдет, если я скажу: commonNumbers[2] результат будет "4", а не "6".

Видимо, массив "commonNumbers" хранил элемент иначе, чем я ожидал. Как я могу решить эту проблему, используя этот метод «хранения»?

Ответы [ 3 ]

2 голосов
/ 07 июня 2019

Это потому, что += в вашем массиве неявно преобразует его в строку , как вы можете видеть в примере ниже, где Число суммируется с Массив .

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

Просто используйте удобный .push ( подробнее о push здесь) метод массивов, чтобы добавить элемент:

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);

Не поймите меня неправильно, решение в порядке, просто хотелось добавить «что-то» к шаблону, чтобы позаботиться о возможных дополнительных сценариях.

0 голосов
/ 07 июня 2019

Вы, похоже, ищете array.prototype.push ( mdn ). E.g.:

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));
0 голосов
/ 07 июня 2019
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 добавляет значения в массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...