Javascript 过滤对象并修改属性

Javascript 过滤对象并修改属性,javascript,reactjs,react-redux,Javascript,Reactjs,React Redux,我有一个新手的问题,我试着一遍又一遍地阅读手册,但还是弄不明白 所以我有这个代码: export function editSerier(data, products) { return (dispatch) => { const filteredProducts = Object.assign( ...Object.keys(products) .filter(key => products[key]

我有一个新手的问题,我试着一遍又一遍地阅读手册,但还是弄不明白

所以我有这个代码:

export function editSerier(data, products) {
    return (dispatch) => {

        const filteredProducts = Object.assign(
            ...Object.keys(products)
                .filter(key => products[key].Artikelgrupp === data.Artikelgrupp)
                .map(k => ({ 
                    [k]: products[k]:{
                    Beskrivning: data.Beskrivning,
                    kategori: data.kategori,
                    status: data.status,
                    synas: data.synas,
                    tillverkare: data.tillverkare,
                    titel: data.titel}
                })

            })



        console.log(filteredProducts)
    }
}
其中,我希望通过“Artikelgrupp”过滤传入的对象产品,然后使用“data”中的属性修改剩余产品的现有属性

但是,这段代码不允许我运行它。 有人知道吗

更新: 刚刚通过合并两个对象解决了这个问题

const filteredProducts = Object.assign(
            ...Object.keys(products)
                .filter(key => products[key].Artikelgrupp === data.Artikelgrupp)
                .map(k => ({ 
                    [k]: {...products[k], ...data}
                }))
        )

您的JavaScript无效。如果需要嵌套对象,则需要
{something:{}
,如果要使用计算属性名,则需要用
[]
将其包围

因此,这将起作用

导出函数编辑器(数据、产品){
返回调度=>{
const filteredProducts=Object.assign(
…对象。键(产品)
.filter(key=>products[key].Artikelgrupp===data.Artikelgrupp)
.map(k=>({
[k] :{
[产品[k]]:{
Beskrivning:数据,Beskrivning,
kategori:data.kategori,
状态:data.status,
synas:data.synas,
tillverkare:data.tillverkare,
titel:data.titel
}
}
}))
);
console.log(filteredProducts);
};
}

如果我理解正确,您希望获得一个对象,该对象:

  • 排除
    products
    的所有值对象,其中
    Artikelgrupp
    字段与
    数据不匹配。Artikelgrupp
  • 来自
    数据
    对象的特定字段
    Beskrivning
    kategori
    等将合并/复制到结果对象的产品值中
解决这个问题的一个办法是

/* Extract entry key/value pairs from products object */
Object.entries(products)
/* Reduce entry pairs to required object shape */
.reduce((result, [key, value]) => {

  /* Substitute for prior filter step. Avoid overhead of array copy
  between prior filter and this reduction. */
  if(value.Artikelgrupp !== data.Artikelgrupp) {
    return result;
  }

  /* Update result object, "upserting" fields of data object into 
  existing product value, for this reduce iteration */
  return {
    ...result,
    [ key ] : {
        ...value,
        Beskrivning: data.Beskrivning,
        kategori: data.kategori,
        status: data.status,
        synas: data.synas,
        tillverkare: data.tillverkare,
        titel: data.titel     
    }
  };

}, {})

它工作,但不是我想要的方式。“数据”对象将被合并到产品中,而不是作为嵌套对象嵌套。刚刚解决了它,但谢谢。你的解决方案,让我意识到错误在哪里。@OblicionA你能发布你的解决方案吗?