Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过Javascript/React中的道具对使用map方法的数组进行排序_Javascript_Reactjs_Sorting_React Props - Fatal编程技术网

如何通过Javascript/React中的道具对使用map方法的数组进行排序

如何通过Javascript/React中的道具对使用map方法的数组进行排序,javascript,reactjs,sorting,react-props,Javascript,Reactjs,Sorting,React Props,我有一个名为products的数组,它使用map方法列出其中的所有元素,并且我尝试按price prop对这些元素进行排序。我尝试了所有类型的排序方法和函数,但都无法使其正常工作 JS 本质上,如何通过道具对react组件进行排序?您应该在映射之前应用排序 const recentprods = products .sort((a,b) => a.price - b.price) // if you want to change the sorting direction:

我有一个名为products的数组,它使用map方法列出其中的所有元素,并且我尝试按price prop对这些元素进行排序。我尝试了所有类型的排序方法和函数,但都无法使其正常工作

JS


本质上,如何通过道具对react组件进行排序?

您应该在映射之前应用排序

const recentprods = products
  .sort((a,b) => a.price - b.price)
      // if you want to change the sorting direction: b.price - a.price
  .map(prod => {
     return <TableRow name={prod.name} price={prod.price} />
  });

您应该在映射之前应用排序

const recentprods = products
  .sort((a,b) => a.price - b.price)
      // if you want to change the sorting direction: b.price - a.price
  .map(prod => {
     return <TableRow name={prod.name} price={prod.price} />
  });

在将数据应用于组件之前,您需要对其进行规范化、排序,并根据需要对其进行修改。在下面的示例中,products数组保存每个具有price属性的单独对象,因此请事先对products数组进行排序,然后映射到项目上

.sort方法对数组中的元素进行适当排序,并返回排序后的数组。chained.map方法将按照指定的顺序在排序的数组上迭代

我相信以下是一个有效的解决方案。请注意,价格被视为一个数字。如果不是,排序可能无法正常工作

const recentprods = products
  .sort((a, b) => a.price - b.price)
  .map(item => <TableRow name={item.name} price={item.price} />);

在将数据应用于组件之前,您需要对其进行规范化、排序,并根据需要对其进行修改。在下面的示例中,products数组保存每个具有price属性的单独对象,因此请事先对products数组进行排序,然后映射到项目上

.sort方法对数组中的元素进行适当排序,并返回排序后的数组。chained.map方法将按照指定的顺序在排序的数组上迭代

我相信以下是一个有效的解决方案。请注意,价格被视为一个数字。如果不是,排序可能无法正常工作

const recentprods = products
  .sort((a, b) => a.price - b.price)
  .map(item => <TableRow name={item.name} price={item.price} />);

所以,是的,基本上你需要先对它排序,然后映射它,我为你建立了一个示例:

constructor(props) {
    super(props);

    this.state = {
      products: [
        { name: 'Product 2', price: 2 },
        { name: 'Product 6', price: 6 },
        { name: 'Product 1', price: 1 },
        { name: 'Product 3', price: 3 },
        { name: 'Product 7', price: 7 },
        { name: 'Product 4', price: 4 },
        { name: 'Product 8', price: 8 },
        { name: 'Product 5', price: 5 },
      ],
    };
  }

  render() {
    return (
      <div>
        <h1>ONLY MAPPED</h1>
        {this.state.products.map((prod, i) => {
          return (
            <li key={i}>
              {prod.name} and its price: {prod.price}
            </li>
          );
        })}

        <h1>BOTH SORTED AND MAPPED.</h1>
        {this.state.products
          .sort((first, second) => {
            return first.price > second.price ? 1 : -1;
          })
          .map((prod, i) => {
            return (
              <li key={i}>
                {prod.name} and its price: {prod.price}
              </li>
            );
          })}
      </div>
    );
  }

所以,是的,基本上你需要先对它排序,然后映射它,我为你建立了一个示例:

constructor(props) {
    super(props);

    this.state = {
      products: [
        { name: 'Product 2', price: 2 },
        { name: 'Product 6', price: 6 },
        { name: 'Product 1', price: 1 },
        { name: 'Product 3', price: 3 },
        { name: 'Product 7', price: 7 },
        { name: 'Product 4', price: 4 },
        { name: 'Product 8', price: 8 },
        { name: 'Product 5', price: 5 },
      ],
    };
  }

  render() {
    return (
      <div>
        <h1>ONLY MAPPED</h1>
        {this.state.products.map((prod, i) => {
          return (
            <li key={i}>
              {prod.name} and its price: {prod.price}
            </li>
          );
        })}

        <h1>BOTH SORTED AND MAPPED.</h1>
        {this.state.products
          .sort((first, second) => {
            return first.price > second.price ? 1 : -1;
          })
          .map((prod, i) => {
            return (
              <li key={i}>
                {prod.name} and its price: {prod.price}
              </li>
            );
          })}
      </div>
    );
  }

假设我们有一个具有名称和价格属性的对象数组

常数乘积=[

{name:"p1",price: 5},
{name:"p2",price: 3},
{name:"p3",price: 2},
{name:"p4",price: 7},
]

我们需要使用Products数组的price属性按升序对其排序

现在,您可以使用要添加的jsx元素调用map函数


PS:您可以在代码中直接使用此函数,也可以使用帮助函数,这样您可以确保其jsx已排序。

考虑我们有一个具有名称和价格属性的对象数组

常数乘积=[

{name:"p1",price: 5},
{name:"p2",price: 3},
{name:"p3",price: 2},
{name:"p4",price: 7},
]

我们需要使用Products数组的price属性按升序对其排序

现在,您可以使用要添加的jsx元素调用map函数


PS:您可以在代码中直接使用此函数,也可以通过使用帮助函数来确保其已排序的jsx。

如果我在map之前或之后应用排序,我无法访问prod.price、prod.name等。那么我该怎么做?我应该在排序方法上再进行一次映射吗?@Uriel为什么您无法访问price和name?它们在映射功能范围内可用。复制并粘贴我的代码。@Uriel刚刚更新了我的答案,可能是gt>符号引起的。减号操作应该对其进行排序。排序方法必须返回一个数字,而不是我的答案中所示的布尔值:DIf如果我在map之前或之后应用排序,我无法访问prod.price、prod.name等。那么我该怎么做?我应该通过排序方法执行另一个map吗?@Uriel为什么不能访问price和name?它们在映射功能范围内可用。复制并粘贴我的代码。@Uriel刚刚更新了我的答案,可能是gt>符号引起的。减号操作应该对其进行排序。排序方法必须返回一个数字,而不是我的答案中所示的布尔值:D
Products.sort((a,b) =>  a.price-b.price ).map(data => {
   return <TableRow name={prod.name} price={prod.price} />;
});