У меня есть работающая функция EcmaScript-3, которая преобразует массив в определенный строковый формат.
Множество:
ft: [
1: {name: "gender", value: "F", focus: 0, type: "radio"}
2: {name: "firstname", value: "empty", focus: 0, type: "text"}
3: {name: "lastname", value: "empty", focus: 0, type: "text"}
4: {name: "birthday", value: "empty", focus: 0, type: "text"}
5: {name: "street", value: "empty", focus: 0, type: "text"}
6: {name: "streetNo", value: "empty", focus: 0, type: "text"}
]
Конкретный формат строки:
ft=gender.radio|F|0;firstName.text|empty|1;lastName.text|empty|0;street.text|empty|0;houseNumber.text|empty|0;zip.text|empty|0;city.text|empty|0;country.select-one|de|0;birthdate-day.text|empty|0;birthdate-month.text|empty|0;birthdate-year.text|empty|0;email.email|empty|0;code.text|filled_out|0
Моя рабочая функция, которая преобразует массив в определенный формат строки:
var arr = [];
for (var i = 0; i < ft.length; i++) {
var elem = ft[i];
arr.push(elem.name + "." + elem.type + "|" + elem.value + "|" + elem.focus);
}
var str = arr.join(";");
console.info(str);
Проблема:
Мне нужна функция (в формате EcmaScript-3), которую можно вызвать так:
var a = tracking()(ft, false);
console.info(a);
// the console.info(a) should provide as a result: ft=gender.radio|F|0;firstName.text|...; false;
Мое решение (не работает)
function tracking() {
return function (ft, submitted) {
var arr = [];
for (var i = 0; i < ft.length; i++) {
var elem = ft[i];
arr.push(elem.name + "." + elem.type + "|" + elem.value + "|" +
elem.focus + "submitted");
}
var str = arr.join(";");
}
}
Спасибо!
return str и готово
@JonasWilms вывод отличается, потому что он добавил «elem.focus + submit» внутри push. Не знаю почему, но все же........
О да, я думаю, это должно быть + "|" + submitted
э-э-э-э, судя по результату, который он предоставил, непонятно, как получилось firstName.text|empty|1;, так как фокус всегда равен 0. Также непонятно, как следует позиционировать это «отправлено», так как оно отсутствует в исходном результате.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Кажется, вы сделали это слишком сложным. Это может быть так просто, как это
function tracking (ft, submitted) {
var arr = [];
for (var i = 0; i < ft.length; i++) {
var elem = ft[i];
arr.push(elem.name + "." + elem.type + "|" + elem.value + "|" +
elem.focus + "submitted");
}
return arr.join(";");
}
И я сомневаюсь, почему вы получили этот представленный параметр. Если вы хотите использовать его как переменную, просто удалите кавычки, помещая его в массив.
Внутренняя функция ваших решений ничего не возвращает. Просто верните str и все заработает. jsfiddle.net/goa2z159 Возможно, вам нужно поработать над окончательным форматом, поскольку он отличается, но в любом случае начните с возврата чего-нибудь.