作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些数据如下所示:
{
"name" : "someValue",
"date" : "someValue",
"age" : "someValue",
"price" : "someValue",
"sales_comp1" : "someValue",
"sales_comp1_dos" : "someValue",
"sales_comp1_units" : "someValue",
"sales_comp1_NOI_unit" : "someValue",
"sales_comp1_sales_pr_unit" : "someValue",
"sales_comp1_adj_SPrice" : "someValue",
"sales_comp1_cap_rate" : "someValue",
"sales_comp2" : "someValue",
"sales_comp2_dos" : "someValue",
"sales_comp2_units" : "someValue",
"sales_comp2_NOI_unit" : "someValue",
"sales_comp2_sales_pr_unit" : "someValue",
"sales_comp2_adj_SPrice" : "someValue",
"sales_comp2_cap_rate" : "someValue",
"sales_comp3" : "someValue",
"sales_comp3_dos" : "someValue",
"sales_comp3_units" : "someValue",
"sales_comp3_NOI_unit" : "someValue",
"sales_comp3_sales_pr_unit" : "someValue",
"sales_comp3_adj_SPrice" : "someValue",
"sales_comp3_cap_rate" : "someValue"
}
我想将 sales_compX 值合并到一个名为 salesComps 的数组中,如下所示:
{
"name" : "someValue",
"date" : "someValue",
"age" : "someValue",
"price" : "someValue",
"salesComps" : [
{
"sales_comp1" : "someValue",
"sales_comp1_dos" : "someValue",
"sales_comp1_units" : "someValue",
"sales_comp1_NOI_unit" : "someValue",
"sales_comp1_sales_pr_unit" : "someValue",
"sales_comp1_adj_SPrice" : "someValue",
"sales_comp1_cap_rate" : "someValue",
},
{
"sales_comp2" : "someValue",
"sales_comp2_dos" : "someValue",
"sales_comp2_units" : "someValue",
"sales_comp2_NOI_unit" : "someValue",
"sales_comp2_sales_pr_unit" : "someValue",
"sales_comp2_adj_SPrice" : "someValue",
"sales_comp2_cap_rate" : "someValue",
},
{
"sales_comp3" : "someValue",
"sales_comp3_dos" : "someValue",
"sales_comp3_units" : "someValue",
"sales_comp3_NOI_unit" : "someValue",
"sales_comp3_sales_pr_unit" : "someValue",
"sales_comp3_adj_SPrice" : "someValue",
"sales_comp3_cap_rate" : "someValue"
}
]
}
最简单的方法是什么?如果您能在 Mongoose 或 Mongodb 代码示例中得到任何回复,我将不胜感激!
最佳答案
首先,使用 Object.keys()
循环访问数据,并等待“sales_comp”数据出现。当它将键值对插入到持有对象中并从主数据中删除该条目时。完成后,将持有对象添加回数据中。像这样的事情...
数据...
var data = {
"name" : "someValue",
"date" : "someValue",
"age" : "someValue",
"price" : "someValue",
"sales_comp1" : "someValue",
"sales_comp1_dos" : "someValue",
"sales_comp1_units" : "someValue",
"sales_comp1_NOI_unit" : "someValue",
"sales_comp1_sales_pr_unit" : "someValue",
"sales_comp1_adj_SPrice" : "someValue",
"sales_comp1_cap_rate" : "someValue",
"sales_comp2" : "someValue",
"sales_comp2_dos" : "someValue",
"sales_comp2_units" : "someValue",
"sales_comp2_NOI_unit" : "someValue",
"sales_comp2_sales_pr_unit" : "someValue",
"sales_comp2_adj_SPrice" : "someValue",
"sales_comp2_cap_rate" : "someValue",
"sales_comp3" : "someValue",
"sales_comp3_dos" : "someValue",
"sales_comp3_units" : "someValue",
"sales_comp3_NOI_unit" : "someValue",
"sales_comp3_sales_pr_unit" : "someValue",
"sales_comp3_adj_SPrice" : "someValue",
"sales_comp3_cap_rate" : "someValue"
};
代码...
// holding Object
var tmpStorage = {};
// Loop through the data
Object.keys(data).forEach(function(d) {
// look for 'sales_comp' keys
if (/sales_comp/.test(d)) {
// find which 'sales_comp' each 'd'
// belongs to with simple regex (allowing
// for more than single digits here)
var id = d.match(/sales_comp([\d]+)/)[1];
// create a tmp property for tmpStorage object
// if it doesn't exist (which it wont on the
// the first pass)
tmpStorage['tmp'+id] = tmpStorage['tmp'+id] || {};
// add the current key-value pair to the
// tmpStorage Object
tmpStorage['tmp'+id][d] = data[d];
// remove the current key-value pair from the
// data object
delete data[d]
}
});
“数据”对象现在看起来像这样......
console.log('data:',data);
/* =>
data: {
name: 'someValue',
date: 'someValue',
age: 'someValue',
price: 'someValue'
}
*/
tmpStorage 对象看起来像这样......
console.log('tmpStorage:',tmpStorage);
/* =>
tmpStorage: {
tmp1: {
sales_comp1: 'someValue',
sales_comp1_dos: 'someValue',
sales_comp1_units: 'someValue',
sales_comp1_NOI_unit: 'someValue',
sales_comp1_sales_pr_unit: 'someValue',
sales_comp1_adj_SPrice: 'someValue',
sales_comp1_cap_rate: 'someValue'
},
tmp2: {
sales_comp2: 'someValue',
sales_comp2_dos: 'someValue',
sales_comp2_units: 'someValue',
sales_comp2_NOI_unit: 'someValue',
sales_comp2_sales_pr_unit: 'someValue',
sales_comp2_adj_SPrice: 'someValue',
sales_comp2_cap_rate: 'someValue'
},
tmp3: {
sales_comp3: 'someValue',
sales_comp3_dos: 'someValue',
sales_comp3_units: 'someValue',
sales_comp3_NOI_unit: 'someValue',
sales_comp3_sales_pr_unit: 'someValue',
sales_comp3_adj_SPrice: 'someValue',
sales_comp3_cap_rate: 'someValue'
}
}
*/
现在只需将“tmpStorage”的内容推送到新的“data.salesComps”数组即可
data.salesComps = Object.keys(tmpStorage).map(function(t) {
return tmpStorage[t];
});
现在“数据”看起来像这样......
console.log('data:',data);
/* =>
data: {
name: 'someValue',
date: 'someValue',
age: 'someValue',
price: 'someValue',
salesComps: [
{ sales_comp1: 'someValue',
sales_comp1_dos: 'someValue',
sales_comp1_units: 'someValue',
sales_comp1_NOI_unit: 'someValue',
sales_comp1_sales_pr_unit: 'someValue',
sales_comp1_adj_SPrice: 'someValue',
sales_comp1_cap_rate: 'someValue'
},
{ sales_comp2: 'someValue',
sales_comp2_dos: 'someValue',
sales_comp2_units: 'someValue',
sales_comp2_NOI_unit: 'someValue',
sales_comp2_sales_pr_unit: 'someValue',
sales_comp2_adj_SPrice: 'someValue',
sales_comp2_cap_rate: 'someValue'
},
{ sales_comp3: 'someValue',
sales_comp3_dos: 'someValue',
sales_comp3_units: 'someValue',
sales_comp3_NOI_unit: 'someValue',
sales_comp3_sales_pr_unit: 'someValue',
sales_comp3_adj_SPrice: 'someValue',
sales_comp3_cap_rate: 'someValue'
}
]
}
*/
它可能看起来很复杂,但一旦您取出所有评论,您就会发现这是一个相对简单的两阶段过程 - 删除您需要的数据,然后以您想要的格式将其添加回来。
希望有帮助:)
关于javascript - 如何将文档字段重组为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44812648/
我是一名优秀的程序员,十分优秀!