Как зациклить массив, введенный во входе и классифицировать в зависимости от их типа? - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь разрешить пользователю вводить массив в <input>.Затем я бы отсортировал их по разным массивам в зависимости от их типов данных;(число, строки и логические значения).

Но я не могу понять, как просмотреть входные данные, чтобы разобраться в них. Пример ввода: [1, «плохо», false, 3, «ключ»]

ДОПОЛНИТЕЛЬНО: Если вы можете помочь завершить код.Это исходный код: Codepen

function sort() {
  const numbers = [];
  const strings = [];
  const booleans = [];
  const others = [];
  const inpArr = document.querySelectorAll(".input");
  //console.log(inpArr.value);
  for (let i = 0; i < inpArr.length; i++) {
    console.log(inpArr[i].value);
    switch (typeof inpArr[i].value) {
      case "Number":
        numbers.push(inpArr[i].value);
        break;

      default:
        console.log(typeof inpArr[i].value)
    }
  }

  const objectResult = {
    "Strings": strings,
    "Numbers": numbers,
    "Booleans": booleans,
    "Others": others

  };

  const JsonObj = JSON.stringify(objectResult)
  document.querySelector("#rawResult").innerText = JsonObj;

}
<div class="inputs">
  <input class="input" placeholder="Enter an Array" />
  <button onclick="sort()">SORT ARRAY</button>
</div>

<div class="result">
  <div id="rawResult"></div>
  <div id="tableResult"></div>
</div>

Мне нужно, как пройти через inpArr и отсортировать каждое значение в соответствующие массивы.и показать пользователя как объект

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Вы не можете сделать с помощью typeof, вы можете сделать это каким-то простым способом, например isNaN, для логического значения. Я думаю, вам нужно проверить точную строку для true or false, иначе будет строка ...

if(!isNaN(inpArr[i].value)) { //Number
  numbers.push(inpArr[i].value);
} else if(inpArr[i].value == "true" || inpArr[i].value == "false") { // boolean
   booleans.push(inpArr[i].value);
} else { // String
   strings.push(inpArr[i].value);
}
0 голосов
/ 22 февраля 2019

Вы можете сделать что-то подобное, используя JSON.parse.Я изменил название клавиш objectResult и сделал его похожим на то, что возвращает typeof, чтобы было проще сортировать их по разным категориям с помощью скобок [].Вместо этого вы можете использовать switch, если вам нужны пользовательские клавиши, такие как Others

function sort() {
  const numbers = [];
  const strings = [];
  const booleans = [];
  const others = [];
  const value = document.querySelectorAll(".input")[0].value;
  let inputArray

  try {
    inputArray = JSON.parse(value)
  } catch {
    alert("Please enter a valid JSON string")
    return;
  }

  const objectResult = {
    "string": strings,
    "number": numbers,
    "boolean": booleans,
  };

  inputArray.forEach(item => {
    objectResult[typeof item].push(item)
  });

  const JsonObj = JSON.stringify(objectResult)
  document.querySelector("#rawResult").innerText = JsonObj;
}
<div class="inputs">
  <input class="input" placeholder="Enter an Array" value='[1,"bad",false,3,"key"]' />
  <button onclick="sort()">SORT ARRAY</button>
</div>

<div class="result">
  <div id="rawResult"></div>
  <div id="tableResult"></div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...