微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 javascript 的循环中重用对象属性?

如何解决如何在 javascript 的循环中重用对象属性?

我试图在循环中重用对象属性。这是正确的方法吗?我总是收到未定义错误。我想使用的属性是“field_id”和“field_text”。我不确定是否应该将其定义为变量或字符串。

enter image description here

以下是我的完整代码

var client_id = '',company_name = '',vacancy_category_id = '',category_name = '',user_id = '',full_name = '';
    let select2El = {
        params: [{
            'id': '#client_id','url': '/consultant/vacancy/get-clients','field_id': client_id,'field_text': company_name,'success_response': $scope.clients
        },{
            'id': '#clone_client_id',{
            'id': '#category_id','url': '/consultant/vacancy/get-categories','field_id': vacancy_category_id,'field_text': category_name,'success_response': $scope.categories
        },{
            'id': '#owner_id','url': '/consultant/vacancy/get-users-by-type','field_id': user_id,'field_text': full_name,'success_response': $scope.users
        }]
    }

    for (var key in select2El.params) {
        var sel = select2El.params[key];
        angular.element(sel['id']).select2({
            width: '100%',placeholder: '--Select--',ajax: {
                url: sel['url'],dataType: 'json',data: function (params) {
                    return {
                        search: params.term,page: params.page || 1
                    }
                },processResults: function (response,params) {
                    params.page = params.page || 1;
                    return {      
                        results: response.data.map(function (res) {
                            console.log(res);
                            return { id: res.sel['field_id'],'text': res.sel['field_text'] }
                        }),pagination: {
                            more: (params.page * 10) < response.total
                        }
                    };
                },success: function (response) {
                    sel['success_response'] = response.data;
                }
            }
        });
    }

循环对象属性的那一行是这样的:

return { id: res.sel['field_id'],'text': res.sel['field_text']

当我 console.log(res) 时,我得到了这些数据。

enter image description here

解决方法

发生这种情况是因为您的 res.sel 字段是 undefined。据我了解,您希望 field_id 中存储的对象的值 field_textselect2El.params

试试下面的代码-

var client_id = '',company_name = '',vacancy_category_id = '',category_name = '',user_id = '',full_name = '';
    let select2El = {
        params: [{
            'id': '#client_id','url': '/consultant/vacancy/get-clients','field_id': client_id,'field_text': company_name,'success_response': $scope.clients
        },{
            'id': '#clone_client_id',{
            'id': '#category_id','url': '/consultant/vacancy/get-categories','field_id': vacancy_category_id,'field_text': category_name,'success_response': $scope.categories
        },{
            'id': '#owner_id','url': '/consultant/vacancy/get-users-by-type','field_id': user_id,'field_text': full_name,'success_response': $scope.users
        }]
    }

    for (let key in select2El.params) {
        let sel = select2El.params[key];
        angular.element(sel['id']).select2({
            width: '100%',placeholder: '--Select--',ajax: {
                url: sel['url'],dataType: 'json',data: function (params) {
                    return {
                        search: params.term,page: params.page || 1
                    }
                },processResults: function (response,params) {
                    params.page = params.page || 1;
                    return {      
                        results: response.data.map(function (res,index) {
                            console.log(res);
                            return { id: sel['field_id'],'text': sel['field_text'] }
                        }),pagination: {
                            more: (params.page * 10) < response.total
                        }
                    };
                },success: function (response) {
                    sel['success_response'] = response.data;
                }
            }
        });
    }

我在 index 中使用 .map 从原始对象中获取 field_textfield_id 的值

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。