代码之家  ›  专栏  ›  技术社区  ›  universe11

为什么我的let变量不更改或过滤?

  •  0
  • universe11  · 技术社区  · 3 年前

    我想按id过滤我的产品(删除一个)。

    如果我控制台日志,它可以正常工作,但变量没有改变,arr是一样的。为什么?

    const express = require('express');
    
    const bodyParser = require('body-parser');
    
    const app = express();
    
    const path = require('path');
    
    app.use(express.json());
    app.use(express.urlencoded());
    
    const js = require('./translation.json');
    
     app.use('/public', express.static('public'));
    
    let mockProducts = [
      {
        id: '12',
        name: 'Gucci Bag3212',
        desc: 'Lorem ipsum dolor sit amet.',
        photos: [
          {
            image_id: '15',
            photo: 'https://picsum.photos/590/590'
          },
        ],
        price: 19.99,
      },
      {
        id: '13',
        name: 'Leather Shoes',
        desc: 'Lorem ipsum dolor sit amet',
        photos: [
          {
            image_id: '16',
            photo: 'https://picsum.photos/590/590'
          },
        ],
        price: 19.99,
      }
    ];
    
    app.put('/remove_product/:id', (req, res) => {
     mockProducts.filter(el => el.id !== req.params.id);
     res.json({});
    });
    
    app.listen(4000, () => {
      console.log('LISTEN')
    });
    

    如果我把控制台记录下来,我会得到正确的产品:

    id = 12
    console.log(mockProducts.filter(el => el.id === req.params.id)) = 
      {
        id: '12',
        name: 'Gucci Bag3212',
        desc: 'Lorem ipsum dolor sit amet.',
        photos: [
          {
            image_id: '15',
            photo: 'https://picsum.photos/590/590'
          },
        ],
        price: 19.99,
      },
    
    

    我非常感谢你的帮助我不明白为什么它不起作用arr没有改变

    2 回复  |  直到 3 年前
        1
  •  1
  •   Joe    3 年前

    mockProducts.filter(el => el.id !== req.params.id);

    这不会修改 mockProducts 但是返回一个新的数组。您需要将其发回(或将其分配给函数中的一个变量并对其执行操作)

        2
  •  1
  •   Aloiso Junior    3 年前

    因为 filter 创建数组的副本,使原始数组保持不变,但可以重新分配

    mockProducts =  mockProducts.filter(el => el.id !== req.params.id);
    

    这将获得筛选器的返回,并修改原始数组