【问题标题】:How can you reuse an object property in a loop in javascript?如何在 javascript 的循环中重用对象属性?
【发布时间】:2020-12-21 05:05:12
【问题描述】:

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

下面是我的完整代码:

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', 
            'url': '/consultant/vacancy/get-clients', 
            'field_id': client_id, 
            'field_text': company_name,
            'success_response': $scope.clients
        }, {
            '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) 时,我得到了这些数据。

【问题讨论】:

  • 您正在返回 res.sel['field_id']。但是,我在您的控制台日志中没有看到“sel”。

标签: javascript angular loops object properties


【解决方案1】:

发生这种情况是因为您的 res.sel 字段是 undefined。据我了解,您希望 field_idfield_text 存储在 select2El.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', 
            'url': '/consultant/vacancy/get-clients', 
            'field_id': client_id, 
            'field_text': company_name,
            'success_response': $scope.clients
        }, {
            '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;
                }
            }
        });
    }

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

【讨论】:

  • 是的,这就是我想要做的。感谢你的帮助。但是,很抱歉,我尝试了您的代码并得到了此响应。 i.ibb.co/C1T4qqF/2020-12-21-12-57.png
  • 此外,我正试图让它像id: res.client_id, 'text': res.company_name。是否可以从select2El.params 对象中连接对象属性?
  • 我认为问题正在发生,因为使用了var,它不会形成块级闭包。我已经编辑了答案,你可以检查一下吗?
  • 另外,您可以使用Object.assign 来合并对象。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 谢谢@rudraprasad!非常感激。顺便说一句,这只是另一个简单的问题。为什么我遇到id 未定义错误? i.ibb.co/n7S6DbV/2020-12-21-20-16.png
猜你喜欢
  • 2016-04-13
  • 2018-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2015-10-07
  • 2020-12-11
相关资源
最近更新 更多