#javascript #angular
#javascript #angular
Вопрос:
У меня есть данные, подобные приведенным ниже
data = ["I253,J665,l2575"]
и мне нужны результаты, подобные
I253,
J665,
l2575
когда я попытался использовать for в, я получаю like I253,J665,l2575
, и я также пробовал циклы for, но не получил результата
let data = ["I253,J665,l2575"]
for (let i = 0; i > this.data.length; i ) {
console.log(i)
}
for (let x of this.data) {
console.log(x)
}
попытался преобразовать данные в строку, а затем с помощью split изменить в array, но тогда я также получаю только typeof object
ниже приведен мой URL-адрес stack blitz =:https://stackblitz.com/edit/angular-ivy-drf1dk?file=src/app/app.component.ts
Ответ №1:
Измените свою data
переменную, как показано ниже:
data = ["I253", "J665", "l2575"];
for(let i = 0; i < this.data.length; i ){
console.log(this.data[i]);
}
Если у вас есть data
переменная в виде data = ["I253,J665,l2575"];
Тогда сначала разделите его, а затем выполните цикл по сгенерированному массиву:
const arr = data[0].split(',');
for(let i = 0; i < arr.length; i ){
console.log(arr[i] ',');
}
Комментарии:
1. я попытался преобразовать его в строку, а оттуда в массив, используя .split(«,’), который также не работает
2. попытался преобразовать данные в строку, а затем с помощью split изменить в array, но тогда я также получаю только typeof object
Ответ №2:
У вас было несколько ошибок. Первый был с for
условием, которого должно быть i < this.data.length
нет i > this.data.length
. Затем вам нужно разделить и выполнить цикл над ним с помощью for (let j = 0; j < data[i].split(',').length; j )
so data[i].split(',')[j]
, чтобы вернуть ожидаемое значение.
В случае 2nd
for...of
цикла вы просто записывали целое значение. Здесь также вам нужно выполнить разделение внутри for...of
и использовать еще один цикл для регистрации.
В качестве альтернативы вы также можете использовать flatMap
и зациклить его следующим образом for (let m of data.flatMap(x => x.split(',')))
.
Попробуйте это ниже. Вы можете использовать this.data
, но в приведенном ниже примере это не сработает, поэтому используется просто data
.
let data = ["I253,J665,l2575"];
console.log("Using for loop");
for (let i = 0; i < data.length; i ) {
for (let j = 0; j < data[i].split(',').length; j ) {
console.log(data[i].split(',')[j]);
}
}
console.log("Using for...of loop");
for (let x of data) {
for (let y of x.split(',')) {
console.log(y);
}
}
console.log("Using flatMap");
for (let m of data.flatMap(x => x.split(','))) {
console.log(m);
}
Комментарии:
1. Хорошо, но этот метод разделения сломается, если у меня будет одно правильное значение, скажем, например, [«I253»] — это единственное значение, которое у меня есть
2. Нет, он не сломается. Попробуйте.
"I253".split(',')
вернет["I253"]
.
Ответ №3:
Есть два способа решить эту проблему. Также обратите внимание, что ваш цикл неправильный, НЕ ДОЛЖНО БЫТЬ ‘>’, а должно быть ‘<‘
1. Ваши данные имеют нулевой индекс массива, поэтому, если вы хотите сохранить данные как есть
let data = ["I253,J665,l2575"]
let splits = data[0].split(',')
for (let i = 0; i < splits.length; i ) {
console.log(splits[i])
}
или
let data = ["I253,J665,l2575"]
let splits = data[0].split(',')
for (let element of splits) {
console.log(element )
}
2. Исправьте строку данных
let dataString = "I253,J665,l2575"
let splits = dataString.split(',')
for (let i = 0; i < splits.length; i ) {
console.log(splits[i])
}
или
let dataString = "I253,J665,l2575"
let splits = dataString.split(',')
for (let element of splits) {
console.log(i)
}
Клонирование примера, приведенного в вопросе
Комментарии:
1. Хорошо, но этот метод разделения сломается, если у меня будет одно правильное значение, скажем, например, [«I253»] — это единственное значение, которое у меня есть
2. Ну , это не так stackblitz.com/edit/angular-ivy-4xf1qh