Javascript React:使用不同的键映射多维数组
如何映射具有不同键的多维数组? 这是一个类似的示例数组:(我的原始数组是从ajax和PHP mysql查询中获得的,这就是我需要这样做的原因): 如果我尝试映射这个数组,我会得到:“uncaughttypeerror:product.phones.map不是函数”:Javascript React:使用不同的键映射多维数组,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,如何映射具有不同键的多维数组? 这是一个类似的示例数组:(我的原始数组是从ajax和PHP mysql查询中获得的,这就是我需要这样做的原因): 如果我尝试映射这个数组,我会得到:“uncaughttypeerror:product.phones.map不是函数”: const List = ({ products, addToCart }) => { return ( <div className="odds-3"> <div classNa
const List = ({ products, addToCart }) => {
return (
<div className="odds-3">
<div className="odds">
{products.map((product, index) =>
<div key={index}>
<p>{product.id} - {product.name}</p>
<ul>
{product.phones.map((phone, index) =>
<li key={index}>{phone.brand} - {phone.model}</li>
)}
</ul>
</div>
)}
</div>
</div>
);
}
在第一个示例中,phones属性是
对象
而不是数组
,因此不具有映射
功能
第二个功能是
手机
是一个阵列产品
不是阵列,因此映射
功能不起作用。试一试
{Object.keys(product.phones).map((phone, index) =>
<li key={index}>{product.phones[phone].brand} - {product.phones[phone].model}</li>
)}
{Object.keys(product.phones).map((phone,index)=>
{product.phones[phone].brand}-{product.phones[phone].model}
)}
相反。正如我之前的其他人告诉您的那样,产品
不是数组,因此您不能在其上使用映射功能
尽管如此,您可以使用lodash
库中的map
函数来迭代对象键/值:
import map from 'lodash'
{map(product, (value, key) =>
...
)}
有关更多信息,请阅读JavaScript中数组的工作方式略有不同。在您的情况下,drop-In-fix将迭代对象的值,如下所示:
{products.map((product, index) =>
<div key={index}>
<p>{product.id} - {product.name}</p>
<ul>
{Object.values(product.phones).map((phone, index) =>
<li key={index}>{phone.brand} - {phone.model}</li>
)}
</ul>
</div>
)}
{products.map((产品,索引)=>
{product.id}-{product.name}
{Object.values(product.phones).map((phone,index)=>
- {phone.brand}-{phone.model}
)}
)}
虽然某些浏览器仍然不支持对象.values()
,但透明化步骤应该注意这一点
请注意,通常不建议使用索引作为键,因为如果您的iterables的顺序或内容发生变化,您可能会得到索引。我该如何遍历数组?如果电话可以是数组,那么保持不变,就可以了。否则,您可以使用@kind uservery interest的答案循环对象中的键!
import map from 'lodash'
{map(product, (value, key) =>
...
)}
{products.map((product, index) =>
<div key={index}>
<p>{product.id} - {product.name}</p>
<ul>
{Object.values(product.phones).map((phone, index) =>
<li key={index}>{phone.brand} - {phone.model}</li>
)}
</ul>
</div>
)}