使用Jquery $.each()操作Javascript对象

Javascript object manipulation with Jquery $.each()

本文关键字:操作 Javascript 对象 Jquery each 使用      更新时间:2023-09-26

我哪里做错了?

var menu = {
    menuset : {
        first  : false,
        second : false,
        third  : false
    },
    setMenus   : function (selected) {
        var menuCollection = this.menuset;
        $.each(menuCollection, function (key, element) {
            if (selected===key) {
                key=true;
            } else {
                key=false;
            }
        });
    }
}

当我执行"menu.setMenus(first)"我希望它像这样设置对象:

    menuset : {
        first  : true,
        second : false,
        third  : false
    }

应该使用$.each()以外的东西吗??

try -

var menu = {
    menuset : {
        'first'  : false,
        'second' : false,
        'third'  : false
    },
    setMenus   : function (selected) {
        var menuCollection = this.menuset;
        $.each(menuCollection, function (key, element) {
            if (selected === key) {
                menuCollection[key] = true;
            } else {
                menuCollection[key] = false;
            }
        });
    }
}
menu.setMenus('first');

Demo - http://jsfiddle.net/nu9v2/

以下几点:

  1. first是它的一个属性。菜单,但你却把它当作first
  2. $.each的回调fn的第一个参数是一个整数索引,但是你

不需要jQuery

var menu = {
    menuset : {
        'first'  : false,
        'second' : false,
        'third'  : false
    },
    setMenus   : function (selected) {
        // set other values to false
        var keys = Object.keys(this.menuset);
        for (var i = 0, len = keys.length; i < len; i++) {
            this.menuset[keys[i]] = false;
        }
        // set correct value to true
        this.menuset[selected] = true;
    }
}
示例

应该使用$.each()以外的东西吗??

我认为map在这里会更好:

setMenus: function (selected) {
   this.menuset = $.map(this.menuset, function(val, key) { return key == selected })
}