为了账号安全,请及时绑定邮箱和手机立即绑定

按唯一键的最后一个索引过滤数组

按唯一键的最后一个索引过滤数组

慕运维8079593 2022-12-29 16:24:44
我有一个更改方法,它为不同的用户进行一系列计算,将总金额分成部分并将其附加到他们的名字上。    {payment.caseWorkers.map((worker) => (          <li>            {worker.name}:{worker.role}{" "}            <input              type='text'              name={worker.name}              placeHolder='Enter Percent Split'              onChange={onChange}            />          </li>        ))}  const onChange = (e) => {    setSplit([      ...split,      {        [e.target.name]: 0.01 * payment.paymentAmount * e.target.value * 0.2,      },    ]);  };创造[{mickey gray: 5}, {mickey gray: 50}, {mickey gray : 500}, {steve smith: 5}, {steve smith: 50}, {steve smith: 500}]我需要[{mickey gray: 500}, {steve smith: 500}]按最后一个索引,以防有人放了太多的零e.target.name 是用户名 e.target.value 是他们输入的金额所以他们每次输入一个新的数组对象时都会创建,理想情况下最后一个条目是该用户的正确数字。所以我需要创建一个过滤器来获取每个唯一 [e.target.name] 的最后一个索引。我试过 (a,x,i) x=> indexOf(a) === i 逻辑,我试过在 foreach 中循环遍历 object.keys 这些方法都不起作用
查看完整描述

2 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

好吧,它并不是那么优雅,但你可以像下面那样做。


var input = [{"mickey gray": 5}, {"mickey gray": 50}, {"mickey gray" : 500}, {"steve smith": 5}, {"steve smith": 50}, {"steve smith": 500}];


// basically - groupby key

var intermediate = input.reduce( (acc,i) => {

   Object.keys(i).forEach( key => acc.hasOwnProperty(key) ? acc[key].push(i[key]) : acc[key] = [i[key]]);

   return acc;

},{});


// take the key and last item from the values

var result = Object.entries(intermediate).map( entry => {

   var [key,value] = entry;

   return {[key]: value[value.length-1]};

});


console.log(result);


查看完整回答
反对 回复 2022-12-29
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

向后循环可以完成这项工作,将用户名和最后索引存储在单独的字典中。您从右到左循环数组。如果用户不在字典中(即它是它的最后一个条目),则将其添加到字典中;否则它只会继续循环。


我建议以这种方式存储每个条目以使循环更容易:


{ userName: 'mickey gray',

  value: 500 }

循环可能是这样的:


let indexDictionary = {};

for(let i = array.length - 1; i >= 0; i--) {

  if(!indexDictionary[array[i].userName]) {

    indexDictionary[array[i].userName] = array[i].value;

  }

}


查看完整回答
反对 回复 2022-12-29
  • 2 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号