в этом формате; sample input: ["book", 1, "table", 4] sample output: {string: ["book", "table"], number: [1,4]}
вот код, который я написал, но это не дает мне выход, который я хочу.
function listDic(arr) {
if (Array.isArray(arr)) {
let output = {};
for (let i =0; i == arr.length; i++) {
if (typeof arr[i] === 'string') {
var str = [];
str.push(arr[i]);
}
if (typeof arr[i] === 'number') {
var num = [];
num.push(arr[i]);
}
}
return {string: str, number: num}
}
return "Only arrays are allowed.";
}
пожалуйста, что именно я ошибаюсь?
Вы можете использовать этот тип непосредственно как ключ для объекта, итерации массива.
Если у вас нет объекта с ключом, сгенерируйте новый с пустым массивом для нажатия фактического элемента.
var array = ["book", 1, "table", 4],
object = {};
array.forEach(function (a) {
var type = typeof a;
object[type] = object[type] || [];
object[type].push(a);
});
console.log(object);
Вы переписываете str
и num
в цикле, не сохраняя при этом никаких других ссылок на массивы. Поместите эти массивы в выходной объект, а затем нажмите на них.
var data = ["book", 1, "table", 4];
console.log(listDic(data));
function listDic(arr) {
if (!Array.isArray(arr)) {
return "Only arrays are allowed.";
}
let output = {
string: [],
number: []
};
for (let i = 0; i < arr.length; i++) {
switch (typeof arr[i]) {
case "string":
output.string.push(arr[i]);
break;
case 'number':
output.number.push(arr[i]);
}
}
return output;
}
Вы можете просто уменьшить массив в объекте и использовать тип значений в качестве ключей
var arr = ["book", 1, "table", 4];
function listDic(arr) {
return arr.reduce((a, b) => {
let t = typeof b;
a[t] ? a[t].push(b) : a[t] = [b];
return a;
}, {});
}
console.log(listDic(arr));
спасибо, я получил лучший способ решить это сам
function listDic(arr) {
if (Array.isArray(arr)) {
let str = [];
let num = [];
for (let i =0; i < arr.length; i++) {
if (typeof arr[i] === 'string') {
str.push(arr[i]);
}
if (typeof arr[i] === 'number') {
num.push(arr[i]);
}
}
return {string: str, number: num}
}
return "Only arrays are allowed.";
}
Я думаю, это должно сработать для вас:
function listDic(arr) {
if (Array.isArray(arr)) {
let output = {};
var str = [],
num = []; //CORRECTED
for (let i = 0; i < arr.length; i++) { //CORRECTED
if (typeof arr[i] === 'string') {
str.push(arr[i]);
}
if (typeof arr[i] === 'number') {
num.push(arr[i]);
}
}
return { string: str, number: num }
}
return "Only arrays are allowed.";
}
console.log(listDic(["book", 1, "table", 4]));
объяснение
В основном, было два вопроса:
== arr.length
для вашего условия ввода для цикла.str
и num
с повторной декларацией var str[i] = []
ИЛИ var num[i] = []
.Надеюсь это поможет.
i == arr.length
должно бытьi < arr.length
let output = {};