2017-12-24 4 views
0

Die Daten, die ich bekommen habe ist ein Array von Objekten wie zum Beispiel:Object Generator für Konfigurationen

[ 
 
    { 
 
    id: 0, 
 
    config: false 
 
    }, 
 
    { 
 
    id: 1, 
 
    config: false 
 
    }, 
 
    { 
 
    id: 2, 
 
    config: false 
 
    }, 
 
    { 
 
    id: 3, 
 
    config: false 
 
    } 
 
]

Ich möchte diese Aufgabe zu übernehmen und eine Art von Algorithmus müssen Konfigurationen in neue zu machen Objekte wie

[ 
 
    { 
 
    id: 0, 
 
    config: false 
 
    }, 
 
    { 
 
    id: 1, 
 
    config: true 
 
    }, 
 
    { 
 
    id: 2, 
 
    config: false 
 
    }, 
 
    { 
 
    id: 3, 
 
    config: false 
 
    } 
 
] 
 

 
[ 
 
    { 
 
    id: 0, 
 
    config: false 
 
    }, 
 
    { 
 
    id: 1, 
 
    config: false 
 
    }, 
 
    { 
 
    id: 2, 
 
    config: true 
 
    }, 
 
    { 
 
    id: 3, 
 
    config: false 
 
    } 
 
]

und so weiter ... Ich brauche nur eine Konfiguration, um wahr zu sein, und alle anderen sollten falsch sein. Jede Hilfe wäre willkommen. Ich habe mir die Haare ausgerissen. ES6 ist auch eine Option.

Danke

Antwort

0

var object = []; 
 
for (var i = 0; i < 10; i ++) { 
 
    object [i] = { 
 
    "id": i, 
 
    "config": false 
 
    }; 
 
} 
 

 
// Algorithm 
 
for (var i = 0; i < object.length; i ++) { 
 
    var clone = makeClone (object); 
 
    clone [i].config = true; 
 
    console.log (clone); \t \t 
 
} 
 

 
function makeClone (object) { 
 
    var tmp = []; 
 
    for (var i = 0; i < object.length; i ++) { 
 
    tmp [i] = {}; 
 
    var objectKeys = Object.keys (object [i]); 
 
    for (var j = 0; j < objectKeys.length; j ++) { 
 
     var key = objectKeys [j]; 
 
     tmp [i][key] = object [i][key]; 
 
    } 
 
    } 
 

 
    return tmp; 
 
}

1

Sie einen generator function dafür nehmen könnte.

function* getParts(array) { 
 
    var i = 1 << array.length; 
 

 
    while (i--) { 
 
     yield array.map((o, j) => Object.assign({}, o, { config: !(i & 1 << j) })); 
 
    } 
 
} 
 

 
var array = [{ id: 0, config: false }, { id: 1, config: false }, { id: 2, config: false }, { id: 3, config: false }]; 
 

 
console.log([...getParts(array)]);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

Das ist großartig. Wie könnte ich nur die Konfigurationen mit nur einem wahren zu allen Zeiten generieren? –

+0

Sie brauchen also nur vier Arrays? –

+0

Von Ihrer Antwort glaube ich, dass ich bekam, was ich brauchte, danke für alles. –

0

Es ist einfach. Angenommen, Sie müssen Feld config ändern mit id = 1. Versuchen Sie folgendes:

const arr = [ 
    { 
    id: 0, 
    config: false 
    }, 
    ... 
]; 

const newArr = arr.map(item => { 
    if (item.id === 1) { 
    item.config = true; 
    } 

    return item; 
}); 

aktualisieren Sehen Sie sich meine jsfiddle Beispiel: https://jsfiddle.net/smhfanda/jwamLq01/

Verwandte Themen