Node.js 在Express中编辑全局数组

Node.js 在Express中编辑全局数组,node.js,express,Node.js,Express,我想从app locals变量的数组中更改一项,但我不确定如何执行此操作 以下是我设置为全局的 app.locals.products=[{name: 'a',url: '/a' }, {name: 'b',url: '/b' }, {name: 'c',url: '/c' },... 我想编辑它们,从路线设置活动产品,并执行类似操作 products:[{name: 'a',url: '/a' active:true}], 但当我这样做时,它将删除所有其他项,并仅设

我想从app locals变量的数组中更改一项,但我不确定如何执行此操作

以下是我设置为全局的

app.locals.products=[{name: 'a',url: '/a' },
    {name: 'b',url: '/b' },
    {name: 'c',url: '/c' },...
我想编辑它们,从路线设置活动产品,并执行类似操作

    products:[{name: 'a',url: '/a' active:true}],

但当我这样做时,它将删除所有其他项,并仅设置我编写的产品。有没有办法只编辑我需要的一个项目,而不修改其余的项目?

您可以使用数组查找功能在产品数组中查找特定项目并进行编辑

function setActive(name) {

  var element = products.find(function(product) {
    return product.name === name;
  });

  if (element) {
    element.active = true;
  }
}
此函数获取
名称
变量,检查
产品
数组中是否存在该变量,并将其设置为活动。如果没有,您可能希望抛出异常

用法:

setActive('a');

你需要找到产品的索引。。。产品[索引]。活动=true@David你能给我举个例子吗?我得到错误500。。。我在路由器内部的路由中使用了它。。这可能是因为我有空格吗?这是全局数组
app.locals.products=[{name:'Window&residential door system',url:'/en/products/Window-residential door system'},{name:'Shutter system',url:'/en/product/Shutter_system'},{name:'Shutter systems',url:'/en/product/Shutter_system'},{name:'Sheets',url:'/en/product/Sheets'},{name:'Building profiles&systems',url:'/en/product/profiles&systems'}];
这是路由
var express=require('express');var router=express.router();router.get('/',function(req,res,next){var url=req.originalUrl;function setActive(name){var element=products.find(函数(产品){return product.name==name;});if(元素){element.active=true;}}setActive('Window&residential door system');res.render('index',{title:'The premium brand',pageurl:url,welcome:true});});module.exports=router;
您是否将函数定义放在router.get函数中?当然,它应该在函数外部,并且只有setActive调用应该在函数内部。空格应该没有问题。我发现了问题所在,我必须先请求locals变量,并放置所有代码,包括setAc函数setActive(name){var element=req.app.locals.products.find(函数(product){return product.name==name;});if(element){element.active=true;}}setActive('a');感谢您的帮助!