Javascript React:使用不同的键映射多维数组

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

如何映射具有不同键的多维数组? 这是一个类似的示例数组:(我的原始数组是从ajax和PHP mysql查询中获得的,这就是我需要这样做的原因):

如果我尝试映射这个数组,我会得到:“uncaughttypeerror:product.phones.map不是函数”:

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>
    )}