用点表示法

时间:2017-06-19 10:55:39

标签: javascript angularjs

我正在尝试创建一个像这个“价格”的对象结构:{“minPrice”:1000,“maxPrice”:10000},来自URL中传递的点国家(price.minPrice = 4000)。 “价格”可以是从符号的第一部分传递的任何值。

我使用下面的代码,但它不会创建所需的出来。此外,当我更新值时,如果应返回“price”:{“minPrice”:updatedvalue,“maxPrice”:updatedvalue} not {“minPrice”:updatedvalue}或{“maxPrice”:updatedvalue}

function getUrlDotNotation(key, value) {

        var arr = key.split('.'),
        var label = arr[0],
        queryParams = {};


        for (var i = 0; i < arr.length - 1; i++) {
            vm.queryParams = vm.queryParams[arr[i]] = {};
        }

        vm.queryParams[arr[arr.length - 1]] = value;

        return vm.queryParams;
    }


    $scope.$watch('vm.modelMin', function onSliderMinChange(newValue, oldValue) {
        if (isSearchResultsPage) {
            if (newValue !== oldValue && !_.isNaN(newValue) && !_.isNaN(oldValue)) {
                getUrlDotNotation(vm.firstHandleBackendVar, vm.options[newValue].value);
            }
        }
    });

    $scope.$watch('vm.modelMax', function onSliderMaxChange(newValue, oldValue) {
        if (isSearchResultsPage) {
            if (newValue !== oldValue && !_.isNaN(newValue) && !_.isNaN(oldValue)) {
                getUrlDotNotation(vm.secondHandleBackendVar, vm.options[newValue].value);
            }
        }
    });

1 个答案:

答案 0 :(得分:0)

问题是你在每次迭代时都会覆盖vm.queryParams,而且#34;滑动&#34;指针应该是一个单独的变量,例如

&#13;
&#13;
function makeObject(key, value) {
  let 
    obj = {}, 
    o = obj,
    keys = key.split('.'),
    last = keys.pop();
  
  for (let k of keys)
    o = o[k] = {};
  
  o[last] = value;
  return obj;
}


console.log(makeObject('foo.bar.baz', 42))
&#13;
&#13;
&#13;