我有一个像这样的对象作为来自服务器的 JSON 响应返回:
{
"0": "1",
"1": "2",
"2": "3",
"3": "4"
}
我想将其转换为 JavaScript 数组,如下所示:
["1","2","3","4"]
有没有最好的方法来做到这一点?无论我在哪里阅读,人们都在使用循环来使用复杂的逻辑。那么有其他方法可以做到这一点吗?
$.map
const o = {"0":"1","1":"2","2":"3","3":"4"};
const arr = $.map(o, function(el) { return el; })
console.log(arr)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
并且在没有 jQuery 的情况下几乎同样简单,将键转换为数组,然后使用
Array.map
映射回值
const o = {"0":"1","1":"2","2":"3","3":"4"};
const arr = Object.keys(o).map(k => o[k]);
console.log(arr)
假设它已经被解析为 JavaScript 对象,并且实际上不是 JSON,它是一种字符串格式,在这种情况下,也需要运行
JSON.parse
。
Object.values
来救援,这使得这变得轻而易举,但是 仅当 你的对象在按键中没有任何间隙时:
const o = {"0":"1","1":"2","2":"3","3":"4"};
const arr = Object.values(o);
console.log(arr);
如果存在有间隙,您需要使用
Object.entires
来代替,然后将键/值对减少为数组:
const o = {"0":"1","5":"6","7":"8","10":"11"};
const arr = Object.entries(o).reduce((arr, [key, value]) => {
arr[key] = value;
return arr;
}, []);
console.log(arr);
var json = '{"0":"1","1":"2","2":"3","3":"4"}';
var parsed = JSON.parse(json);
var arr = [];
for (var x in parsed) {
arr.push(parsed[x]);
}
console.log(arr)
希望这就是您所追求的!
你只需这样做
var data = {
"0": "1",
"1": "2",
"2": "3",
"3": "4"
};
var arr = [];
for (var prop in data) {
arr.push(data[prop]);
}
console.log(arr);
没有什么比“JSON 对象”更好的了 - JSON 是一种序列化符号。
如果您想将 javascript 对象 转换为 javascript 数组,您可以编写自己的循环 [这不会那么复杂!],或者依赖 underscore.js
_.toArray()
方法:
var obj = {"0":"1","1":"2","2":"3","3":"4"};
var yourArray = _(obj).toArray();
这里没什么难的。循环对象元素并将它们分配给数组
var obj = {"0":"1","1":"2","2":"3","3":"4"};
var arr = [];
for (elem in obj) {
arr.push(obj[elem]);
}
var JsonObj = {
"0": "1",
"1": "2",
"2": "3",
"3": "4"
};
var array = [];
for (var i in JsonObj) {
if (JsonObj.hasOwnProperty(i) && !isNaN(+i)) {
array[+i] = JsonObj[i];
}
}
console.log(array)
Object.assign()
与空数组文字 []
一起使用作为 target
:
const input = {
"0": "1",
"1": "2",
"2": "3",
"3": "4"
}
const output = Object.assign([], input)
console.log(output)
如果选中 polyfill,
Object.assign(target, ...sources)
只是将所有可枚举的自身属性从 source
对象复制到目标对象。如果 target
是一个数组,它会将数字键添加到数组文字中并返回该 target
数组对象。
试试这个:
var newArr = [];
$.each(JSONObject.results.bindings, function(i, obj) {
newArr.push([obj.value]);
});
var obj = {"0":"1","1":"2","2":"3","3":"4"};
var vals = Object.values(obj);
console.log(vals); //["1", "2", "3", "4"]
问题的另一种选择
var vals = Object.values(JSON.parse(obj)); //where json needs to be parsed
使用原始 JavaScript,假设你有:
var j = {0: "1", 1: "2", 2: "3", 3: "4"};
您可以通过以下方式获取值:
Object.keys(j).map(function(_) { return j[_]; })
输出:
["1", "2", "3", "4"]
不确定我在这里缺少什么,但只需尝试下面的代码即可完成工作。我在这里错过了什么吗?
https://jsfiddle.net/vatsalpande/w3ew5bhq/
$(document).ready(function(){
var json = {
"code" :"1",
"data" : {
"0" : {"id":"1","score":"44"},
"1" : {"id":"1","score":"44"}
}
};
createUpdatedJson();
function createUpdatedJson(){
var updatedJson = json;
updatedJson.data = [updatedJson.data];
$('#jsondata').html(JSON.stringify(updatedJson));
console.log(JSON.stringify(updatedJson));
}
})
假设您的值如下
var obj = {"0":"1","1":"2","2":"3","3":"4"};
然后你可以使用以下代码将其转换为 JavaScript 数组
var arr = [];
json = JSON.stringify(eval('(' + obj + ')')); //convert to json string
arr = $.parseJSON(json); //convert to javascript array
这也适用于将 json 转换为多维 javascript 数组。
除了我在本文中提到的方法之外,在使用 php json 编码字符串时,此页面上的其他方法似乎都不适合我。
这是一个如何获取对象数组 和 然后对数组进行排序的示例。
function osort(obj)
{ // map the object to an array [key, obj[key]]
return Object.keys(obj).map(function(key) { return [key, obj[key]] }).sort(
function (keya, keyb)
{ // sort(from largest to smallest)
return keyb[1] - keya[1];
}
);
}
公认的解决方案期望键从 0 开始并且是连续的 - 它将值获取到数组中,但在途中丢失了索引。
如果您的“带有数字键的对象”不满足这些更严格的假设,请使用此功能。
//let sourceObject = ...
let destinationArray = [];
Object.keys(sourceObject).forEach(k => destinationArray[k] = sourceObject[k]);
这是最好的解决方案。我想是的。
Object.keys(obj).map(function(k){return {key: k, value: obj[k]}})
var data = [];
data = {{ jdata|safe }}; //parse through js
var i = 0 ;
for (i=0;i<data.length;i++){
data[i] = data[i].value;
}
$data='{"resultList":[{"id":"1839","displayName":"Analytics","subLine":""},{"id":"1015","displayName":"Automation","subLine":""},{"id":"1084","displayName":"Aviation","subLine":""},{"id":"554","displayName":"Apparel","subLine":""},{"id":"875","displayName":"Aerospace","subLine":""},{"id":"1990","displayName":"Account Reconciliation","subLine":""},{"id":"3657","displayName":"Android","subLine":""},{"id":"1262","displayName":"Apache","subLine":""},{"id":"1440","displayName":"Acting","subLine":""},{"id":"710","displayName":"Aircraft","subLine":""},{"id":"12187","displayName":"AAC","subLine":""}, {"id":"20365","displayName":"AAT","subLine":""}, {"id":"7849","displayName":"AAP","subLine":""}, {"id":"20511","displayName":"AACR2","subLine":""}, {"id":"28585","displayName":"AASHTO","subLine":""}, {"id":"45191","displayName":"AAMS","subLine":""}]}';
$b=json_decode($data);
$i=0;
while($b->{'resultList'}[$i])
{
print_r($b->{'resultList'}[$i]->{'displayName'});
echo "<br />";
$i++;
}