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