javascript - 如何访问对象上的子键值并克隆该对象
问题描述
我正在尝试从 React 上的对象创建一个列表。在继续之前,我将分享我的代码:
const genres = {
Rock: {
album1: '',
album2: '',
},
Jazz: {
album1: '',
album2: '',
},
Pop: {
album1: '',
album2: '',
}
};
let myFunc = genress => {
let newObject = {};
Object.keys(genress).map(gen => {
newObject[gen] = 'a';
let newChild = newObject[gen];
let oldChild = genress[gen];
Object.keys(oldChild).map(gen2 => {
newChild[gen2] = 'b';
let newGrandChild = newChild[gen2];
console.log(newGrandChild);
})
});
return newObject;
}
myFunc(genres);
我想在列表中呈现该对象。
<ul>
<li>Rock
<ul>
<li>album1</li>
<li>album2</li>
</ul>
</li>
</ul>
...And so on
在将它放在 React 上之前,我正在尝试它的正常功能。我正在制作一个新对象,只是为了确保我获得了正确的值。问题是,当我在函数末尾返回新对象时,它返回流派而不是专辑,只有我在第一个 Object.key 中设置的“a”。第二个 Object.key 上的 console.log 记录未定义,无法弄清楚为什么会发生这种情况。
我的想法是访问对象上的每个级别,这样我就可以将它们设置为变量并将它们返回到渲染的组件上。我会制作更多关卡:流派 -> 乐队 -> 专辑 -> 歌曲。
提前非常感谢:)
解决方案
据我所知,您正在错误地迭代对象。
'a' 是唯一出现的原因是,每次运行循环并将当前键设置为该值时,您都在硬编码。
所以基本上你的代码不起作用,因为你将当前键的值设置为'a',它是一个字符串,所以'a'上没有键,所以第二个循环不会产生任何东西。
newObject[gen] = 'a'; // you are setting obj[Rock]='a'
let newChild = newObject[gen]; // this is just 'a'
let oldChild = genress[gen]; // this is just 'a'
Object.keys(newObject[gen]) // undefined
我认为您正在尝试做的是迭代对象,然后在列表中呈现该对象的内容。
如果以下内容回答了您的问题,请告诉我。
您可以在此处查看代码: https ://codesandbox.io/s/elastic-dhawan-01sdc?fontsize=14&hidenavigation=1&theme=dark
这是代码示例。
import React from "react";
import "./styles.css";
const genres = {
Rock: {
album1: "Hello",
album2: "Rock 2"
},
Jazz: {
album1: "",
album2: ""
},
Pop: {
album1: "",
album2: ""
}
};
const createListFromObject = (key) => {
return (
<div>
<h1>{key}</h1>
<ul>
{Object.entries(genres[key]).map(([k, v], idx) => (
<li key={`${key}-${k}-${v}-${idx}`}>{`Key: ${k} Value ${v}`}</li>
))}
</ul>
</div>
);
};
export default function App() {
return (
<div className="App">{Object.keys(genres).map(createListFromObject)}</div>
);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
推荐阅读
- excel - Excel - 接收运行时错误 1004 ODBC 错误
- r - 当变量在另一个文件中定义时,将固定宽度的文件导入 R
- r - 在 R 中从 Behrmann CRS 映射转换为 +proj=longlat WGS84
- c# - 如何使用正则表达式裁剪字符串?
- javascript - 通过添加 waitForKeyElements 自动单击多个按钮
- github - 如何在 github 项目板的进度条中添加自定义创建的列?
- unicode - Unicode 中的“非代理 Unicode 代码点”是什么意思?
- python - 为什么在使用 __slots__ 时会默认删除 __weakref__?
- ios - 当单词出现在数组的标签中时设置图像
- python - 当 pip 设置为需要 virtualenv 时,如何在 anaconda3 venv 中允许 pip?