将对象键和其值推送到数组。

7

I have an object like this:

{
 "id": 23,
 "name": "Jacob",
 "link": {
     "rel": "self",
     "link": "www.abc.com"
 },
 "company":{
       "data":{
           "id": 1,
           "ref": 324
       }
 }

我希望在Javascript或Typescript中,能够将每个键和它的值存储到一个数组中,格式如下: [["id":23], ["name":"Jacob"], ["link":{......, ......}]] 然后依次添加每个ID。 我最好的猜测是通过循环遍历数组,并为每个元素附加一个ID/标识符。但我不知道如何实现...请问如何解决这个问题?谢谢。

3
你所要求的语法是无效的。相反,解释一下你要解决的问题是什么。 - zerkms
是的。这样怎么样:[["id",23], ["name","Jacob"], ["link",{......, ......}]] - Maurice Perry
嗯,我明白了...有点复杂,让我稍后回复您。 - Yasir
@MauricePerry 是的,那就是我想要的。 - Yasir
回答并添加了演示。 - Salih Şenol Çakarcı
你想要解决什么问题?创建这些数组后,你想要能够做什么? - Martin
9个回答

16

太接近了,谢谢,但它仍然将键分离到一个数组中,值分离到另一个数组中 array[2] -> 0: id 1: 23 - Yasir
它只是显示那样,实际上它是 ["id", 23]。 - Salih Şenol Çakarcı
JavaScript中的数组具有索引。因此,如果您想访问"id",只需使用console.log(arr[0][0])即可查看它。 - Salih Şenol Çakarcı
console.log(arr[0]); 的结果是 ["id", 23]。 - Salih Şenol Çakarcı
@Sahil 我不需要它被分离…我正在使用Ionic 2,只需引用键即可引用值以获取它们。 - Yasir

5
p.forEach( function (country) { 
  country.forEach( function (entry) {
    entry.push( {"value" : 'Greece', "synonyms" : 'GR'});
   });
 });

3
你好,解释一下代码会有助于其他用户理解。 - tima

2
你可以尝试使用实验性的 Object.entries

let obj = {
 "id": 23,
 "name": "Jacob",
 "link": {
     "rel": "self",
     "link": "www.abc.com"
 },
 "company":{
       "data":{
           "id": 1,
           "ref": 324
       }
 }};

console.log(Object.entries(obj).map(item => ({[item[0]]:item[1]})));

对于不支持的浏览器,您可以使用polyfill:https://github.com/es-shims/Object.entries


这不是我想要的...它将值"id"和23分开了。 - Yasir
我在我的代码中添加了 Array.map 函数,请再次检查是否得到您想要的结果。 - Andriy

2
您可以使用迭代/递归方法来处理对象及其嵌套部分。这适用于任何深度。

function getKeyValue(object) {
    return Object.keys(object).reduce(function (result, key) {
        return result.concat(
            object[key] && typeof object[key] === 'object' ?
            getKeyValue(object[key]) :
            [[key, object[key]]]
        );
    }, []);
}

var data = { id: 23, name: "Jacob", link: { rel: "self", link: "www.abc.com" }, company: { data: { id: 1, ref: 324 } } };

console.log(getKeyValue(data));
.as-console-wrapper { max-height: 100% !important; top: 0; }


2
你可以使用 Object.keys 方法来获取一个包含所有属性的数组,然后使用 Array#map 方法返回一个包含每个属性的对象的新数组。
这个 ES6 的一行代码就可以实现:
const splitObject = o => Object.keys(o).map(e => ({ [e]: o[e] }));

在 ES5 中:

function splitObject(o) {
    return Object.keys(o).map(function(e) {
        return Object.defineProperty({}, e, { 
            value: o[e], 
            enumerable: true 
        });
    });
}

1
  var res = [];
_.transform( {
  "id": 23,
  "name": "Jacob",
  "link": {
    "rel": "self",
    "link": "www.abc.com"
  },
  "company": {
    "data": {
      "id": 1,
      "ref": 324
    }
  }
}, function(result, value, key) {
    res.push(key +':'+value);
}, {});

你可以使用下划线。

0
var obj=[{"Name":ABC,"Count":123},{"Name":XYZ,"Count":456}];
var arr = [];

for (var prop in obj) {
      if (obj.hasOwnProperty(prop)) {
        var innerObj = {};
        innerObj[0] = obj[prop];
        arr.push(innerObj[0]);
      }
    }

/* 这里上面的 innerobj 索引设置为 0,那么如果您没有指定,我们将在 arr 中获得相同的数据,arr 将包含 arr[0] 的结果。 然后我们需要像这样调用第一个记录对象 arr[0][0] */

0

支持所有主要浏览器,包括IE11

Object.entries()正好可以给你这个。

const obj = {
  id: 23,
  name: 'Jacob',
  link: {
    rel: 'self',
    link: 'www.abc.com'
  },
  company: {
    data: {
      id: 1,
      ref: 324
    }
   }
 };

Object.entries(obj);
// output:
[
    [
        "id",
        23
    ],
    [
        "name",
        "Jacob"
    ],
    [
        "link",
        {
            "rel": "self",
            "link": "www.abc.com"
        }
    ],
    [
        "company",
        {
            "data": {
                "id": 1,
                "ref": 324
            }
        }
    ]
]

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接