我目前正在学习JavaScript,我的老师要求我做一个练习,该练习将返回包含该对象所有名称的数组:
{
name: 'grandma',
daughter: {
name: 'mother',
daughter: {
name: 'daughter',
daughter: {
name: 'granddaughter'
}
}
}
}
我的问题是,类似这样的一个,但解决方案并不为我工作,因为我的对象不包含任何阵列。我到目前为止的代码:
function toArray(obj) {
const result = [];
for (const prop in obj) {
const value = obj[prop];
if (typeof value === 'object') {
result.push(toArray(value));
}
else {
result.push(value);
}
}
return result;
}
function nameMatrioska(target) {
return toArray(target);
}
打印出以下内容: [ 'grandma', [ 'mother', [ 'daughter', [Array] ] ] ]
但是我的老师想要的是: ['grandma', 'mother', 'daughter', 'granddaughter']
显然,您将一个数组推到一个数组,其中所有嵌套子级都显示为一个数组。
要解决此问题,您可以迭代数组并将仅单个项目推入结果集中。
使用一些内置技术的另一种方法是使用数组,并返回没有嵌套数组的单个数组。
一些方法:
Array#concat
,创建一个新数组。它也可以与较旧的Javascript版本一起使用。
result = result.concat(toArray(value));
Array#push
与数组并Function#apply
用于将数组作为参数列表。它可以在原位运行,并且可以与JS的旧版本一起使用。
Array.prototype.push.apply(result, toArray(value));
[].push.apply(result, toArray(value)); // needs extra empty array
扩展语法,...
用于将数组扩展为参数。ES6
result.push(...toArray(value));
传播语法是功能强大的替代品,apply
具有更大的用途。也请提供示例。
最后是一个具有传播语法的示例。
function toArray(obj) {
const result = [];
for (const prop in obj) {
const value = obj[prop];
if (value && typeof value === 'object') { // exclude null
result.push(...toArray(value));
// ^^^ spread the array
}
else {
result.push(value);
}
}
return result;
}
function nameMatrioska(target) {
return toArray(target);
}
var object = { name: 'grandma', daughter: { name: 'mother', daughter: { name: 'daughter', daughter: { name: 'granddaughter' } } } };
console.log(nameMatrioska(object));
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句