Как преобразовать набор строк в массив «ОДИН» в JavaScript?

#javascript #arrays #string

Вопрос:

У меня есть некоторые данные в виде строки, и я хочу, чтобы они находились внутри массива, чтобы я мог их отфильтровать.

Я пробовал .split (), но он создавал отдельные массивы, а не один массив со всеми данными внутри него.

Вот как выглядит часть данных.

 "Jane Doe"
"John Smith"
"Rose Benet"
list goes on 
 

Каков наилучший способ преобразования этих строк в один массив?

Вот что я попробовал.

 for (let i = 0; i < customerData.length; i  ) {
    let arrays = customerData[i].name;
    function flatten(arr) {
        return [].concat(...arr);
        
    }
    console.log(flatten(arrays));
}
 

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

 Array(14)
0: "J"
1: "a"
2: "n"
3: "e"
4: " "
5: "D"
6: "o"
7: "e"
length: 8

Array(11)
0: "J"
1: "o"
2: "h"
3: "n"
4: " "
5: "S"
6: "m"
7: "i"
8: "t"
9: "h"
length: 10

list goes on
 

Желаемым результатом было бы:

 ['Jane Doe', 'John Smith', "Rose Benet" list goes on]
 

Вот как определяется «Пользовательские данные»:

 CustomerData = [
  {
   "index": 0,
   "name" : "A",
   "gender" : "male",
   "company" : "CC"
  },
  {
   "index": 1,
   "name" : "B",
   "gender" : "female",
   "company" : "DD"
}]
 

Вот что я пробовал до сих пор. В моем приложении React я хочу создать окно поиска, чтобы пользователи могли вводить поисковый запрос, чем будет отображаться отфильтрованный результат.

Это код реакции.

 state = {
  names: [],
  searchTerm: ''
}

editSearchTerm = (e) => {
   this.setState({ searchTerm: e.target.value });
 }

dynamicSearch = () => {
   for(let i = 0; i < customerData.length; i  ) {
            
         this.setState({ names: customerData[i].name });

        }
    return this.state.names.filter(name => 
        name.toLowerCase().includes(this.state.searchTerm.toLocaleLowerCase()))
    }

 

И когда я пытаюсь ввести какой-либо поисковый запрос, React выдает ошибку «Ошибка ввода: это.состояние.имена.фильтр не является функцией».

Я предполагаю, что ошибка msg означает, что свойство «имя» должно быть массивом. Когда я проверяю в инструменте разработки Chrome, ‘customerData[i].name’ возвращается в виде строк.

Вот тут я и застрял. Кажется, я не могу получить значения «имя» внутри массива.

Они либо попадают в собственный массив (поэтому вместо массива(63) он показывает массив(1), Массив(1), массив(1)…… в консоли.)

Как я могу преобразовать ‘customerData[i].name’ в один массив?

Комментарии:

1. Используйте concat или оператор распространения . Обратите внимание, что это очень простой синтаксис JS, и любой наполовину приличный учебник по JS научит вас, как это сделать. (просто не забудьте найти его для современного JS. Если в учебнике говорится о document.write () или alert(), найдите другой)

2. Можете ли вы показать нам фрагмент кода, с помощью которого была предпринята попытка .split() . Спасибо.

3. Эй, Вазид, я только что отредактировал свой вопрос своей попыткой. Не могли бы вы, пожалуйста, взглянуть и дать мне совет. Спасибо!

4. .split() не создает «отдельные массивы». Он возвращает 1 массив, разделяя строку любым указанным вами разделителем. Так что либо вы не понимаете массивы, либо неправильно описываете свою проблему. Сделайте js-скрипку с примером вашей проблемы.

5. Можете ли вы точно показать, как customerData это определяется?

Ответ №1:

Или если у вас есть имена в одной переменной, например:

 const names = "Alex Kyle Aaron";
 

Вы можете сделать:

 const arrayOfNames = names.split(" "); 
console.log(arrayOfNames); // ["Alex", "Kyle", "Aaron"]
 

Надеюсь, это помогло! Удачи.

Ответ №2:

Просто сделай это:

 const arr = ["Jane Doe", "John Smith", "Rose Banet"]
 

Javascript может просто создать массив, [] и, конечно, вы можете поместить в него данные, разделив их несколькими запятыми.

Ответ №3:

Поможет ли это?

 var data = `
Test Name
Pizza Cheese
Hello World
`;

console.log(data.split('n').filter(n => n != ''));
 

Комментарии:

1. Я предполагаю, что в ваших данных могут быть разрывы строк.

Ответ №4:

 let stringValue='Jane Doe John Smith Rose Benet';
let stringList = stringValue.split(' ');
let resultList=[];

stringList.forEach((item,index)=> { if(index%2){ resultList.push(stringList[index-1] ' ' item);  } });

console.log(resultList);
 

Список результатов => [«Джейн Доу», «Джон Смит», «Роза Бенет»]

Ответ №5:

Учитывая структуру customerData , вы можете получить массив, содержащий свойство «имя» каждого объекта, customerData просто с:

 customerData.map(customer => customer.name);
 

В действии:

 let customerData = [
  {
   "index": 0,
   "name" : "A",
   "gender" : "male",
   "company" : "CC"
  },
  {
   "index": 0,
   "name" : "B",
   "gender" : "female",
   "company" : "DD"
}];
console.log(customerData.map(customer => customer.name));