Как мне ссылаться на положение элемента в массиве JavaScript.(Я не получаю ожидаемый результат) - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь добиться того, чтобы каждый раз, когда новый клиент добавлялся в массив клиентов, я хотел, чтобы функция возвращала «Добро пожаловать (новое имя клиента), вы (его позиция в массиве) в строке».

Что я делаю не так?Я пытаюсь получить индекс нового клиента, чтобы добавить 1, чтобы он начал считать с 1.

    let clients = ['Smith', 'Stebve', 'John']

    function clientQue(array, newCustomer) {
        array.splice(1, 0, newCustomer)
        return "Welcome " + newCustomer + ", you are number " +  parseInt(array.indexOf('newCustomer')) + 1 + " in line.";
    }
    clientQue(clients, 'Bob');

Ответы [ 7 ]

2 голосов
/ 21 марта 2019

Вам не хватает paranthesis (), чтобы вырваться из конкатенации строк и выполнить сначала математику

"Welcome " + newCustomer + ", you are number " +  (array.indexOf(newCustomer) + 1 ) + " in line.";

Поскольку вы используете array.splice для вставки всегда в первую позицию индекса, вы также можетеудалить все array.indexOf и всегда просто вывести 1.

1 голос
/ 21 марта 2019

Это будет работать для вас (мне всегда нравится использовать `` при объединении строк

let clients = ['Smith', 'Stebve', 'John']

    function clientQue(array, newCustomer) {
        array.splice(1, 0, newCustomer)
        return `Welcome ${newCustomer} you are number ${parseInt(array.indexOf(newCustomer)) + 1}  in line.`;
    }
    let message = clientQue(clients, 'Bob');

    console.log(message)

Thisэто вывод

Добро пожаловать, Боб, ты номер 2 в очереди.

1 голос
/ 21 марта 2019

Вы можете отменить новый клиент и принять новую длину массива в качестве значения.

function clientQue(array, newCustomer) {
    return "Welcome " + newCustomer + ", you are number " + array.unshift(newCustomer) + " in line.";
}

let clients = ['Smith', 'Stebve', 'John']

console.log(clientQue(clients, 'Bob'));
0 голосов
/ 22 марта 2019
  1. Поскольку клиенты - это очередь, я думаю, вы хотели бы поместить нового клиента в начало массива, поэтому вы должны использовать индекс 0 в splice.т. е.

    array.splice(0, 0, newCustomer);

    Если вы хотите поставить нового клиента сзади, вы можете использовать push() вместо этого.(Я предпочитаю использовать push() на самом деле.)

  2. array.indexOf() должен возвращать число, поэтому вам не нужно использовать parseInt().

  3. Однако, так как вы используете строковые операции перед увеличением индекса, вы должны использовать круглые скобки для операции сложения.т. е.

    'Welcome ' +
    newCustomer +
    ', you are number ' +
    (array.indexOf(newCustomer) + 1) +
    ' in line.'
    

Примечание. Поскольку Боб является новым клиентом в конце очереди, вам может потребоваться изменить индекс вычисления на: (array.length - array.indexOf(newCustomer)).

Давайте соединим их,

let clients = ['Smith', 'Stebve', 'John'];

function clientQue(array, newCustomer) {
  array.splice(0, 0, newCustomer);
  return (
    'Welcome ' +
    newCustomer +
    ', you are number ' +
    (array.indexOf(newCustomer) + 1) +
    ' in line.'
  );
}
const q = clientQue(clients, 'Bob');

console.log(q); // Welcome Bob, you are number 1 in line.

console.log(clients); // [ 'Bob', 'Smith', 'Stebve', 'John' ]
0 голосов
/ 21 марта 2019

Повторное размещение моего ответа, поскольку он был удален, и у меня не было возможности обновить его

Пара вещей:

Вызов .splice удаляет элемент из массива, и, исходя из вашего вопроса, не похоже, что это желаемый результат.

Кроме того, вам не нужно вызывать array.indexOf(), потому что длина массива будет позицией вновь добавленного клиента.

У вас может быть функция, которая принимает имя, такое как «Jeff», добавляет его в клиентский массив и затем возвращает приветственное сообщение. Вот пример.

var clients = ["bob", "jane", "isaac", "harry"];
function addClient(name) {
  clients.push(name);
  return "Welcome " + name + " you are position " + clients.length + " in array";
}
console.log(addClient("Jeff"));
0 голосов
/ 21 марта 2019
let clients = ['Smith', 'Stebve', 'John']

function clientQue(array, newCustomer) {
    return "Welcome " + newCustomer + ", you are number " +  (parseInt([...array, newCustomer].indexOf(newCustomer)) + 1) + " in line.";
}
clientQue(clients, 'Bob');

Это должно вернуть то, что вам нужно, однако Array.splice изменяет исходный массив, что означает, что он также изменяет значения исходного массива. Изменение значений данного параметра может быть вредным.

[...array]

создает новый массив из элементов старого массива и

[...array, newCustomer]

помещает новый элемент в новый массив.

0 голосов
/ 21 марта 2019

Удалить цитаты в этой части из newCustomer.Должен оцениваться как «Боб».parseInt(array.indexOf(newCustomer))

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