如何将一个对象迭代到一个对象数组中

4

我创建了一个对象,需要将其传递到一个方法中,我需要使用每个对象进行迭代。由于我的对象只有值,所以它无法被传递。有人能帮我解决吗。

我的代码:

var MyObj = {
    country : "Aus",
    Time : "EST",
    Val : "Pecific"
}

现在,我需要在一个方法中传递这个MyObj:
this.someMethod(id, MyObj);

在某个方法中,我有一段代码如下:
Ext.Array.forEach(MyObj, function (Value) {})

此时失败是因为MyObj不是一个对象数组。如何进行更正。


Object.keys(MyObj) - Mouser
我需要在哪里使用那个。 - David
4个回答

3

var MyObj = {
    country : "Aus",
    Time : "EST",
    Val : "Pecific"
}

//Without ext
function someMethod(id, MyObj)
{
  Object.keys(MyObj).forEach(function (Value) {
console.log(MyObj[Value]);
});
}

someMethod(1, MyObj);

这段代码(使用原生JS)将使用Object.keys从对象中获取键,并允许您对其进行迭代。适用于对象和数组。


3
你可以通过以下方式实现这一点:

var MyObj = {
    country : "Aus",
    Time : "EST",
    Val : "Pecific"
}

function someFunction(id, obj){
  var objArray = $.map(obj, function(el) { 
    console.log(el);
    return el 
  });
}
someFunction(1, MyObj)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


1
为什么要引入像jQuery这样的库来处理可以由纯JS处理的事情呢? - Mouser

3

如果您能提供更多信息,那将非常有帮助。

我不确定您想要实现什么,但是有几种方法可以遍历对象。

如果您想将对象拆分为多个单键对象:

> Object.keys(MyObj).map(key => ({ [key]: MyObj[key] }))
[ { country: 'Aus' }, { Time: 'EST' }, { Val: 'Pecific' } ]

另一方面,如果您有一个接受数组的函数,但您只想传递这个对象:
Ext.Array.forEach([MyObj], Value => ())

(但在这种情况下,最好直接调用函数。)

3

The ExtJs way

ExtJs提供了Ext.Object.eachValue,这正是您正在寻找的方法。
ExtJs文档中可以得知:

遍历对象并为每个迭代调用给定的回调函数。可以通过在回调函数中返回false来停止迭代。

以下代码遍历MyObj的每个值,并调用回调函数。

var MyObj = {
    country : "Aus",
    Time : "EST",
    Val : "Pecific"
}

Ext.Object.eachValue(MyObj, function (Value) {console.log(Value)});

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