替换javascript对象中的字段?使用splice和push,indexOf到splice返回-1值?

时间:2014-07-09 16:07:05

标签: javascript arrays loops object indexing

我有一个数组,在任何时候都可能包含以下值的任意组合:

var positions = ['first', 'second', 'third', 'fourth'];

目标是重建一个Javascript对象,默认情况下设置为:

currentPositioning = { 'positioning': [
                                      { 'first': false },
                                      { 'second': false },
                                      { 'third': false },
                                      { 'fourth': false } 
                                    ]
                                };

使用位置数组来重建currentPositioning对象:

positions.forEach(setPositions);
function setPositions(element, index, array) {
    if (element == 'first') {
        // define objSplice object
        var objSplice = {};
        // set object of 'array.element' to false .. {'element': false}
        objSplice[element] = false;
        console.log('objSplice = ' + JSON.stringify(objSplice));
        // find index that matches {'element': false}
        var index = currentPositioning["positioning"].indexOf( objSplice );
        console.log('index = ' + index);
        if (index > -1) {
                // remove index that matches {'element': false}
            currentPositioning["positioning"].splice(index, 1);
        }
        // define obj object
        var obj = {};
        // set obj object of 'array.element' to true .. {'element': true}
        obj[element] = true;
        // add {'element': true} to array
        currentPositioning["positioning"].push( obj );
    }
    if (element == 'second') {
        ...

基本上,如果其中一个位置位于位置数组中,那么currentPositioning对象中的该位置应设置为true ..否则它应保持false

这个想法是......当......

var positions = ['first', 'second', 'third'];

..然后..

currentPositioning = { 'positioning': [
                                      { 'first': true },
                                      { 'second': true },
                                      { 'third': true },
                                      { 'fourth': false } 
                                    ]
                                };

出于某种原因,现在index = -1 ..每次..所以结果不断变成这样的东西!? :

currentPositioning = { 'positioning': [
                                      { 'first': false },
                                      { 'second': false },
                                      { 'third': false },
                                      { 'fourth': false },
                                      { 'first': true },
                                      { 'second': true },
                                      { 'third': true },
                                    ]
                                };

1 个答案:

答案 0 :(得分:2)

您可以使用Underscore.js执行此操作(我添加了一些临时变量以提高可读性):

var positions = ['first', 'second', 'third'];

var updatedPositions = _.map(['first', 'second', 'third', 'fourth'], function(p) {
  var json={};
  json[p] = _.contains(positions,p);
  return json;
});

var currentPositioning = { 'positioning': [
  updatedPositions
]
};