在数组中以有效的方式添加值的逻辑,谁能告诉我们我们称之为数组模式?



假设我们有一个数组以下面的格式存储在一个对象中,请帮我写一下这个逻辑。

let example output = {
'a':['WO','WO','WO','M','M','M','M'],
'b':['M','WO','WO','WO','M','M','M'],
'c':['M','M','WO','WO','WO','M','M'],
'd':['M','M','M','WO','WO','WO','M'],
'e':['M','M','M','M','WO','WO','WO'],
'f':['WO','M','M','M','M','WO','WO'],
'b':['WO','WO','M','M','M','M','WO'],
'c':['WO','WO','WO','M','M','M','M'],
'd':['M','WO','WO','WO','M','M','M'],
'e':['M','M','WO','WO','WO','M','M'],
}

下面的

const generatedShift = (shift, totalNumberOfDays) => {
const SHIFTS = ['M', 'A', 'N'];
const shiftData = [];
if (typeof shift === 'string' && shift.length === 1 && typeof totalNumberOfDays === 'number') {
if (SHIFTS.includes(shift.toLocaleUpperCase()) && totalNumberOfDays) {
for (let dd = 0; dd < totalNumberOfDays; dd++) {
shiftData.push(shift);
}
return shiftData;
} else {
console.log('Please pass valide shift/days, argument passed for shift/days is false not appropirate');
}
} else {
console.log('argument passed for shift/days is not appropirate');
}
}
shift = generatedShift('M', 7);

以上逻辑将生成['M','M',…7次)下面的逻辑会添加WO,但我的逻辑有问题到目前为止,我已经写了这个并且卡住了这个逻辑

let indexToStartWO=0;
let noOfWO = 3;
let noOfM = 4;
for (let w = indexToStartWO; w < shift.length; w = w + noOfWO + noOfM) {
console.log("w", w);
shift.splice(w, noOfM, 'WO', 'WO', 'WO');
}
indexToStartWO++;

同样地,它应该为新的对象条目保持重复,具有类似的数组模式值重复,(请帮助我知道这个模式名称)我们可以称之为轮询吗请帮忙写这个逻辑

  • 如果在97122之间进行迭代,则可以使用String.fromCharCodei从数字转换为字母。
  • 要创建数组模式,我们初始化一个新的数组,看起来像["WO" x3, "M" x 4],并在每次迭代中将最后一项移到数组的前面

代码:

let terms = [
...Array.from({ length: 3 }, () => 'WO'),
...Array.from({ length: 4 }, () => 'M'),
];
let example = {};
for (let i = 97; i <= 122; i++) {
example[String.fromCharCode(i)] = terms.slice(0, 8);
terms = [terms[terms.length - 1], ...terms.slice(0, -1)];
}
console.log(example) //> 
/* 
{
a: ['WO', 'WO', 'WO', 'M', 'M', 'M', 'M'],
b: ['M', 'WO', 'WO', 'WO', 'M', 'M', 'M'],
c: ['M', 'M', 'WO', 'WO', 'WO', 'M', 'M'],
d: ['M', 'M', 'M', 'WO', 'WO', 'WO', 'M'],
e: ['M', 'M', 'M', 'M', 'WO', 'WO', 'WO'],
f: ['WO', 'M', 'M', 'M', 'M', 'WO', 'WO'],
g: ['WO', 'WO', 'M', 'M', 'M', 'M', 'WO'],
h: ['WO', 'WO', 'WO', 'M', 'M', 'M', 'M'],
i: ['M', 'WO', 'WO', 'WO', 'M', 'M', 'M'],
...
};
*/

演示:

let terms = [
...Array.from({ length: 3 }, () => 'WO'),
...Array.from({ length: 4 }, () => 'M'),
];
let example = {};
for (let i = 97; i <= 122; i++) {
example[String.fromCharCode(i)] = terms.slice(0, 8);
terms = [terms[terms.length - 1], ...terms.slice(0, -1)];
}
// From here onwards `example` contains your target object, the code below this is just to show that.
//console.log(example)

(async() => {
let entries = Object.entries(example)
for ([key, value] of entries) {
console.log(value, key)
await new Promise((r) => setTimeout(r, 200))
}
})()

试试这个,简单多了

let arr = ['WO', 'WO', 'WO', 'M', 'M', 'M', 'M']
let arr2 = []
let first = "b", last = "z";
var result = {};
result['a'] = arr;
for (let i = first.charCodeAt(0); i <= last.charCodeAt(0); i++) {
arr2.push(arr[arr.length -1 ]);
for (let j = 0; j < arr.length -1; j++) {
arr2.push(arr[j]);
}
result[eval("String.fromCharCode(" + i + ")")] = arr2;
arr = arr2;
arr2 = [];
}
console.log( result );

在result变量中,您将得到最终输出

如果你想用不同的字母来做这个模式只要改变arr的值就可以了

相关内容

最新更新