如何使用阵列分割JSON对象为单独的对象
问题描述:
我有JSON在下面的格式:如何使用阵列分割JSON对象为单独的对象
{
"line_items": [
{
"rate": ["10", "20"],
"description": ["desc 1", "desc 2"],
"name": ["name 1", "name 2"]
}
]
}
元件的阵列中的数量可以变化,但是每个元件的阵列将始终是相同的大小作为彼此。我通过将对象拆分为多个对象来移除数组。
这样的:
{
"line_items": [
{
"rate": "10",
"description": "desc 1",
"name": "name 1"
},
{
"rate": "20",
"description": "desc 2",
"name": "name 2"
}
]
}
我需要用JavaScript来做到这一点。
有没有一个功能可以为我做到这一点?我想我可能不得不使用foreach循环,但不知道如何处理它。
答
var obj = {
"line_items": [
{
"rate": ["10", "20"],
"description": ["desc 1", "desc 2"],
"name": ["name 1", "name 2"]
}
]
}
var props = [];
for (var key in obj.line_items[0]) {
props.push(key);
}
var arrD = [];
obj.line_items[0].rate.forEach(function(ele,ind){
var temp = {};
props.forEach(function(innerEle){
temp[innerEle] = obj.line_items[0][innerEle][ind];
});
arrD.push(temp);
});
var obj = {"line_items" : arrD}
console.log(obj);
obj.line_items[0].rate.forEach(function(ele,ind){
var temp = {};
props.forEach(function(innerEle){
temp[innerEle] = obj.line_items[0][innerEle][ind];
});
arrD.push(temp);
});
答
这应该工作
function itemExpander(json) {
var result = {line_items: []};
var item = json.line_items[0]
for (var i = 0; i < item.rate.length; i++) {
result.line_items.push({
rate: item.rate[i],
description: item.description[i],
name: item.name[i],
})
}
return result;
}
答
使用它
var obj = {
"line_items": [
{
"rate": ["10", "20"],
"description": ["desc 1", "desc 2"],
"name": ["name 1", "name 2"]
}
]
};
length = obj.line_items[0].rate.length;
newObject ={};
var limits = [];
for(var i=0; i < length ; i++){
newObject["rate"] = obj.line_items[0].rate[i];
newObject["description"]= obj.line_items[0].description[i];
newObject["name"]=obj.line_items[0].name[i];
limits.push(newObject);
newObject ={}
}
var lastObject = {"line_items":limits};
console.log(lastObject);
答
递归就地方法:
var object = {
"line_items": [
{
"rate": ["10", "20"],
"description": ["desc 1", "desc 2"],
"name": ["name 1", "name 2"]
}
]
};
function oneIntoMany(list) {
var obj = list[0];
var tmp_obj = {};
var again = true;
for(var prop in obj){
if(obj.hasOwnProperty(prop)){
if(obj[prop].length > 1){
tmp_obj[prop] = obj[prop].pop();
}else{
obj[prop] = obj[prop][0];
again = false;
}
}
}
if(again){
list.push(tmp_obj);
oneIntoMany(list);
}
}
oneIntoMany(object.line_items);
console.log(object);
答
这里是一个可行的解决方案。希望能帮助到你!
var obj = {
"line_items": [
{
"rate": ["10", "20"],
"description": ["desc 1", "desc 2"],
"name": ["name 1", "name 2"]
}
]
}
var arr1 = [];
var arr2 = [];
var arr3 = [];
var result = {line_items: []};
for(var i in obj){
for(var j in obj[i]){
var myObject = obj[i];
if(myObject[j].hasOwnProperty("rate") && myObject[j].hasOwnProperty("description") && myObject[j].hasOwnProperty("name")){
arr1 = myObject[j]["rate"];
arr2 = myObject[j]["description"];
arr3 = myObject[j]["name"];
}
}
}
for(var k = 0; k < 2; k++){
result.line_items.push({
rate: arr1[k],
description: arr2[k],
name: arr3[k]
})
}
console.log(result);
答
var data = {
"rate": ["10", "20"],
"description": ["desc 1", "desc 2"],
"name": ["name 1", "name 2"]
}
function lengthChecker(items){
for(var i in items){
return items[i].length;
}
}
function processFunc(items){
var keys = Object.keys(items);
var arr = [];
var length = lengthChecker(items)
for(let i=0 ; i < length ; i++){
let cell = {};
for(var j in keys){
let targetKeyName = keys[j];
cell[targetKeyName] = items[targetKeyName][i];
}
arr.push(cell);
}
return arr;
}
var processData = processFunc(data)
console.log('processData',processData)
答
你可以遍历所有属性和数组,并建立与单一属性的新阵列。
var data = { line_items: [{ rate: ["10", "20"], description: ["desc 1", "desc 2"], name: ["name 1", "name 2"] }] },
result = { line_items: [] };
data.line_items.forEach(function (o) {
Object.keys(o).forEach(function (k) {
o[k].forEach(function (a, i) {
result.line_items[i] = result.line_items[i] || {};
result.line_items[i][k] = a;
});
});
});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
版本与line_items
多个项目。
var data = { line_items: [{ rate: ["10", "20"], description: ["desc 1", "desc 2"], name: ["name 1", "name 2"] }, { rate: ["30", "40"], description: ["desc 3", "desc 4"], name: ["name 3", "name 4"] }] },
result = { line_items: [] };
data.line_items.forEach(function (o) {
Object.keys(o).forEach(function (k) {
o[k].forEach(function (a, i) {
result.line_items[this.count + i] = result.line_items[this.count + i] || {};
result.line_items[this.count + i][k] = a;
}, this);
this.max = Math.max(this.max, o[k].length);
}, this);
this.count += this.max;
this.max = 0;
}, { count: 0, max: 0 });
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答
插入变量的问题你的对象在下面的代码等等看。 line_items对象可以包含多个元素。不,你必须写自己:
var question={
"line_items": [
{
"rate": ["10", "20","30"],
"description": ["desc 1", "desc 2","desc 3"],
"name": ["name 1", "name 2" ,"desc 3"]
}
]
};
var answer={"line_items":[]};
for(var i=0;i<question['line_items'].length;i++){
for(var j=0;j<question['line_items'][i]['rate'].length;j++){
var newObject={};
newObject['rate']=question['line_items'][i]['rate'][j];
newObject['description']=question['line_items'][i]['description'][j];
newObject['name']=question['line_items'][i]['name'][j];
answer["line_items"].push(newObject);
}
}
*如果你的意思是否有一个内置的功能“是否有可能为我做这样的功能?” *。 –
使用a为每个获取所有属性,然后为任何一个属性迭代以创建数组的对象 –