更改嵌套对象值

时间:2018-04-30 18:12:58

标签: javascript arrays sorting object lodash

我有一个JS对象,我试图循环并更改。

的值

以下对象的示例:

var response = { 
'2433345':
[ 
{ 
   taskId: 20295179,
   stageId: 'AB-5R-GF', 
},
{ 
   taskId: 20295176,
   stageId: 'AB-5R-GF',
},
],
'2539643':
[
{ 
   taskId: 28295179,
   stageId: 'AB-5R-RD', 
},
{ 
   taskId: 20445176,
   stageId: 'AB-5R-ZZ',
},
]
}

父值是JobID,然后是一个数组,其中包含该作业中每个阶段和任务的嵌套对象。

我正在尝试迭代并将stageID值更改为连续数字。作业中的每个数字都高于最后一个,保留重复的相同数字。

期望的结果是:

var response = { 
'2433345':
[ 
{ 
   taskId: 20295179,
   stageId: 1, 
},
{ 
   taskId: 20295176,
   stageId: 1,
},
],
 '2539643':
 [
 { 
   taskId: 28295179,
   stageId: 1, 
   },
   { 
   taskId: 20445176,
   stageId: 2,
},
]
}

我想知道解决这个问题的最佳方法是什么?使用Lodash和_.uniqBy是最好的方法吗?

1 个答案:

答案 0 :(得分:2)

即使您没有显示自己的代码 - 这是我自己的尝试。 未经测试 - 但这是一个解释。 重建结果,我们从var index = 0; var finalResult = _.reduce(response, function(result, value, key) { indexOfIDs = {}; result[key] = []; _.each(value, function(item){ if(typeof indexOfIds[item.taskId] !== 'undefined'){ result[key].push(_.assign(item, {stageId: indexOfIds[item.taskId]})) } else { indexOfIds[item.taskId] = index++; result[key].push(_.assign(item, {stageId: index})) } }) return result; }, {}) 开始,对于每个值的数组项,我们使用递增的索引来编写stageItem。

我们在旁边保留一个列表,以跟踪数组中项目的索引,并检查我们是否为stageId或列表中的现有索引添加新索引。

0501 02:16:17.345309  2433 net.cpp:400] loss -> loss
I0501 02:16:17.345317  2433 layer_factory.hpp:77] Creating layer loss
F0501 02:16:17.345377  2433 softmax_loss_layer.cpp:47] Check failed: outer_num_ * inner_num_ == bottom[1]->count() (7056 vs. 65536) Number of labels must match number of predictions; e.g., if softmax axis == 1 and prediction shape is (N, C, H, W), label count (number of labels) must be N*H*W, with integer values in {0, 1, ..., C-1}.
*** Check failure stack trace: ***
    @     0x7f7d2c9575cd  google::LogMessage::Fail()
    @     0x7f7d2c959433  google::LogMessage::SendToLog()
    @     0x7f7d2c95715b  google::LogMessage::Flush()
    @     0x7f7d2c959e1e  google::LogMessageFatal::~LogMessageFatal()
    @     0x7f7d2d02d4be  caffe::SoftmaxWithLossLayer<>::Reshape()
    @     0x7f7d2d0c61df  caffe::Net<>::Init()
    @     0x7f7d2d0c7a91  caffe::Net<>::Net()
    @     0x7f7d2d0e1a4a  caffe::Solver<>::InitTrainNet()
    @     0x7f7d2d0e2db7  caffe::Solver<>::Init()
    @     0x7f7d2d0e315a  caffe::Solver<>::Solver()
    @     0x7f7d2cf7b9f3  caffe::Creator_SGDSolver<>()
    @           0x40a6d8  train()
    @           0x4075a8  main
    @     0x7f7d2b40b830  __libc_start_main
    @           0x407d19  _start
    @              (nil)  (unknown)