将带有数字键的 JavaScript 对象转换为数组

我有一个这样的对象作为来自服务器的 JSON 响应返回:

{
"0": "1",
"1": "2",
"2": "3",
"3": "4"
}

我想把它转换成这样的 JavaScript 数组:

["1","2","3","4"]

有什么最好的办法吗?无论我在哪里阅读,人们都在使用复杂的逻辑使用循环。那么有没有替代的方法来做到这一点呢?

677395 次浏览

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 obj = {"0":"1","1":"2","2":"3","3":"4"};
var arr = [];
for (elem in obj) {
arr.push(obj[elem]);
}

Http://jsfiddle.net/qq2am/

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)

演示

没有什么比得上“ JSON 对象”-JSON 是一种序列化符号。

如果要将 Javascript 对象转换为 Javascript 数组,可以编写自己的循环[这并不复杂! ]或者你依靠 下划线 js _.toArray()方法:

var obj = {"0":"1","1":"2","2":"3","3":"4"};
var yourArray = _(obj).toArray();

你只需要像这样做

var data = {
"0": "1",
"1": "2",
"2": "3",
"3": "4"
};


var arr = [];
for (var prop in data) {
arr.push(data[prop]);
}


console.log(arr);

演示

试试这个:

var newArr = [];
$.each(JSONObject.results.bindings, function(i, obj) {
newArr.push([obj.value]);
});

JQuery 的 强 > $.map实际上非常简单

var arr = $.map(obj, function(el) { return el });

小提琴

而且在没有 jQuery 的情况下也同样容易,只需将键转换为数组,然后用 强 > Array.map映射回值

var arr = Object.keys(obj).map(function(k) { return obj[k] });

小提琴

这是假设它已经被解析为一个 javascript 对象,并且实际上不是 JSON (字符串格式) ,在这种情况下也需要运行 JSON.parse

在 ES2015中,有 Object.values来拯救,这使得这变得轻而易举

var arr = Object.values(obj);

假设您的值如下所示

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 编码的字符串时,除了我在这里提到的方法之外,这个页面上的其他方法似乎都不能完全工作。

使用原始的 javascript,假设您有:

var j = {0: "1", 1: "2", 2: "3", 3: "4"};

你可以用下面的方法得到值:

Object.keys(j).map(function(_) { return j[_]; })

产出:

["1", "2", "3", "4"]

下面是一个例子,说明如何获得一个对象数组 ,然后对数组进行排序。

  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];
}
);
}

不确定我在这里遗漏了什么,但是简单地尝试下面的代码就可以了。我错过了什么吗?

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));
}
})

这是最好的解决办法,我也这么认为。

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;
}

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

您可以使用 PHP 将 json 对象转换为数组和字符串。

$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++;
}

可以使用带有空数组文字 []Object.assign()作为 target:

const input = {
"0": "1",
"1": "2",
"2": "3",
"3": "4"
}


const output = Object.assign([], input)


console.log(output)

如果检查 填料Object.assign(target, ...sources)只是将所有可枚举的自己的属性从 source对象复制到目标对象。如果 target是一个数组,它将向数组文字添加数值键并返回该 target数组对象。

接受的解决方案期望键从0开始并且是连续的——它将值放入数组,但是在执行过程中丢失了索引。

如果您的“具有数字键的对象”不能满足那些更严格的假设,请使用此选项。

//let sourceObject = ...
let destinationArray = [];
Object.keys(sourceObject).forEach(k => destinationArray[k] = sourceObject[k]);