【问题标题】:Is there a way to say collection[attr1=value].attr2=value in Javascript?有没有办法在Javascript中说collection[attr1=value].attr2=value?
【发布时间】:2013-06-22 00:58:24
【问题描述】:

有什么办法可以说

User.friends[id=1].posts=data

在 Javascript 中,User.friends 是 Friend 项目的集合,其中一个属性是 'id'?

我正在迭代一个集合 User.friends,它是一个 Friend 对象的集合,具有 3 个属性(id、posts 和 likes)。内部迭代器实例变量friend似乎是按值传递而不是按引用传递;那么,如何在迭代器中优雅地设置父对象的属性呢?

    async.each(User.friends, function(friend, cb) {
            var url="https://graph.facebook.com/"+friend.id.id+"/?fields=posts&since="+ moment(postFromDate).format('YYYY-MM-DD') + '&access_token=' + User.accessToken;
            request.get({
                url: url,
                json: true
                }, function (error, response, body) {
                    if (!error && response.statusCode == 200) {
                        console.log(body);
                        //I WANT TO SET THE ACTUAL User.friend[i].posts value, 
                        //but I do not know how to get the value of 'i'?
                        friend.posts=body.data; //this just sets local friend var                           
                        cb(null); 
                    } else {
                        console.log(error);
                        throw error;
                    }

            });  //...request.get
            }, function(error, result) {
                callback();
        }); //...async_each

抱歉,这是一个愚蠢的问题。任何帮助都非常感谢。我试过了:

_.findWhere(User.friends,{id: friend.id}).posts=body.data;

但这似乎不起作用(我认为它只是设置了一个本地值)。

【问题讨论】:

    标签: javascript node.js class iterator


    【解决方案1】:

    您可以使用filter 方法:

    var result = User.friends.filter(function(item) { return item.id === 1; })[0].posts = data;
    

    【讨论】:

    • 这似乎返回了对象的副本-但如果我设置了 result.post,则集合 User.friends 不受影响。有没有办法获取匹配属性的索引,以便我可以直接设置集合?例如User.friend[i].post=xxx 其中 i 等于 User.friends[id=1] 的索引
    • 不,它返回一个存储实际对象的数组。我第一次忘记了[0]。但就像现在一样,您应该能够操纵您的实际对象。看到这个小提琴:jsfiddle.net/wRV3L 你可以通过在User.friends.indexOf() 中包装这个函数来获取索引,但也许有更好的方法来获取索引......我不确定
    • 我很抱歉 - 这是右侧作业中的错误。这个方法很好用!谢谢!
    • 无需道歉。正如我所说,我的答案的第一个版本实际上是错误的,我必须稍后更正它。但我很高兴它现在对你有所帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 2016-02-27
    • 1970-01-01
    相关资源
    最近更新 更多