我有一个这样的对象和数组,我从服务器收到了响应。我需要将其转换为下面的第二种格式,以便在网站上打印该值。这是需要做对象映射的吗?或解析JSON或请帮助。
{"header":["SEOUL","BUSAN","NAMPODONG"],"data":[[38,"CAPITAL","M31"]]}
,
从上方转换为
'{"SEOUL" : "38", "BUSAN" : "CAPITAL", "NAMPODONG" : "M31"}'
var finalObj = {};
response.header.forEach(function(item, index) {
finalObj[item] = response.data[0][index];
});
上面的代码工作正常,因为它为header创建变量和循环并获取其值并以html格式打印。标题和数据来自服务器,所以当我输入一些东西时说“A”然后它会查找SEOUL标题然后在html中打印38,因为表格如下所示。
键值:A
标题:SEOUL BUSAN NAMPODONG数据:38 CAPITAL M31
我在数据库中确实有很多数据,上面只是一个例子。所以,让我说我输入B然后B不在数据库中,所以我想在html中看到值“No found”但是这段代码没有打印,所以不确定它是否继续。
答案 0 :(得分:3)
创建变量&循环遍历object.header
以获取每个密钥,object.data[0]
获取其值
var myObj = {
"header": ["SEOUL", "BUSAN", "NAMPODONG"],
"data": [
[38, "CAPITAL", "M31"]
]
}
var tempObj = {};
myObj.header.forEach(function(item, index) {
tempObj[item] = myObj.data[0][index]
})
console.log(tempObj)
答案 1 :(得分:2)
当你从服务器收到它时 - 我认为它是JSON字符串。
基本上你在这里有两个数组,你想reduce到一个对象。 所以我会这样做:
const object = JSON.parse('{"header":["SEOUL","BUSAN","NAMPODONG"],"data":[[38,"CAPITAL","M31"]]}');
const result = object.header.reduce(function(accumulator, element, i){
accumulator[element] = object.data[0][i] // You had nested array here so I have to get first element.
return accumulator;
}, {});
console.log(result);
我认为data
属性的嵌套数组是某种格式错误。如果不是 - 你必须先map尽管它是元素,然后才减少。
答案 2 :(得分:2)
您可以使用Ramda库中的zipObj。
代码如下所示:
const res = {"header":["SEOUL","BUSAN","NAMPODONG"],"data":[[38,"CAPITAL","M31"]]}
const obj = R.zipObj(res.header, res.data[0])
console.log(obj)
<script src="//cdn.jsdelivr.net/npm/ramda@latest/dist/ramda.min.js"></script>
答案 3 :(得分:0)
您可以使用想要的键映射新对象。
结果是一个包含对象的数组,因为您的数据是一个嵌套数组,实际上只有一个数组。但看起来taht数据可能包含多行。
var data = { header: ["SEOUL", "BUSAN", "NAMPODONG"], data: [[38, "CAPITAL", "M31"]] },
result = data.data.map(a => Object.assign(...data.header.map((k, i) => ({ [k]: a[i] }))));
console.log(result);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 4 :(得分:0)
您可以使用data
数组中的字符串作为键,将header
数组数组映射到另一个对象数组中:
function transform(obj) {
return obj.data.map(function(subArray) { // for each subArray in the data array
return subArray.reduce(function(o, val, i) { // create a new object o which...
o[ obj.header[i] ] = val; // has key-value pairs where value is the current element of subArray and key is its equivalent (item at the same index) from header array
return o;
}, {});
});
}
var obj = {"header":["SEOUL","BUSAN","NAMPODONG"],"data":[[38,"CAPITAL","M31"], [10,"OTHER","M01"]]};
var result = transform(obj);
console.log(result);
&#13;
答案 5 :(得分:0)
我认为上面的回答很好,但是如果你不了解它,这里有一个替代方法
var response = {
"header": ["SEOUL", "BUSAN", "NAMPODONG"],
"data": [
[38, "CAPITAL", "M31"]
]
};
var result = response.header.reduce(function(accum, v, i) {
accum[v] = response.data[0][i];
return accum;
}, {})
console.log(result)
&#13;