gpt4 book ai didi

javascript - 基于多个因素转换 Javascript 数组

转载 作者:行者123 更新时间:2023-12-03 12:22:43 25 4
gpt4 key购买 nike

这将是一个有点长的问题,但请耐心等待,我会尽力解释它。对于一个简单的统计练习,我试图读取某个数据集,但数据的格式非常奇怪。让我们从一个示例数据数组开始。数据在内部按照 8 block 编号进行组织。

[101, 103, 253, 253, 253, 102, 104, 254, 73, 32, 100, 111, 110, 39, 116, 32, 107, 110, 111, 119, 32, 119, 104, 97, 116, 32, 105, 115, 32, 32, 32, 32, 254, 254, 101, 102, 254, 254, 254, 0]

在数据文件中,有一些案例和一些变量(在本例中为 3 个变量和 3 个案例。一个案例可以被视为调查问卷的“受访者”)。

变量看起来像这样(只有一些值相关)

Variable A: Length 8 (regular number)
Variable B: Length 8 (regular number)
Variable C: Length 20 (string)

这意味着变量 A 将占用 1 个字节,变量 B 也将占用,变量 C 将占用 3 个字节 (ceil(20/8))。

如果一个值在 1 到 251 之间,我需要使用“值 - 一定的偏差”。在本例中为 100'

此时,数据如下:

Case 1 Variable A: 1
Case 1 Variable B: 3

但是,并非每个值都适合“一个字节”。例如,变量 C 是一个字符串变量,并且可能有多个字节。这就是 253 值的用武之地。

253 表示:“下一个 8 字节 block 将是该变量的值”。 253 的多个值意味着该一个值将有多个 block 。在本例中,我们知道变量 C 需要 3 个字节。所有这 3 个字节的值都是 253,因此我们知道我们需要在该 block 之后读取 3 个 8 字节的 block 。

从数组的第 8 个元素开始,即:

[73, 32, 100, 111, 110, 39, 116, 32, 107, 110, 111, 119, 32, 119, 104, 97, 116, 32, 105, 115, 32, 32, 32, 32]

将其转换为字符串可以得到:

“我不知道那是什么”

所以此时的数据将是这样的:

Case 1 Variable A: 1
Case 1 Variable B: 3
Case 1 Variable C: 'I don't know what is'

之后我们继续处理数据。我们停在最后一个 253,所以现在还有两个数字(102 和 104,意思是 2 和 4)。

此时数据将是这样的:

Case 1 Variable A: 1
Case 1 Variable B: 3
Case 1 Variable C: 'I don't know what is'
Case 2 Variable A: 2
Case 2 Variable B: 4

现在我们看到值为 254。这意味着“空字符串”。请注意变量 C(当前变量)的长度为 3 个字节。这个 block 中只剩下 1 个字节了。因此我们需要跳过已经读取的 block ,并在那里再读取两个字节。下一个 block 是:

[254, 254, 101, 102, 254, 254, 254, 0]

这将使情况 2 变量 C 的值变为 254, 254, 254,从而产生以下数据集:

Case 1 Variable A: 1
Case 1 Variable B: 3
Case 1 Variable C: 'I don't know what is'
Case 2 Variable A: 2
Case 2 Variable B: 4
Case 2 Variable C: ''

之后,我们还有一些值需要解释,从而形成最终数据集:

Case 1 Variable A: 1 - (101)
Case 1 Variable B: 3 - (103)
Case 1 Variable C: 'I don't know what is' (253, 253, 253 = read 3 blocks: [73, 32, 100, 111, 110, 39, 116, 32, 107, 110, 111, 119, 32, 119, 104, 97, 116, 32, 105, 115, 32, 32, 32, 32]
Case 2 Variable A: 2 - (102)
Case 2 Variable B: 4 - (104)
Case 2 Variable C: '' - (254, 254, 254)
Case 3 Variable A: 1 - (101)
Case 3 Variable B: 2 - (102)
Case 3 Variable C: '' - (254, 254, 254)

用头脑来做这件事似乎很容易。以编程方式执行此操作一直是我无法理解的事情。有人有什么想法吗?

最佳答案

我不清楚如何将 C 的值转换为字符串,但这段代码将帮助您完成 90% 的转换:

function Reader(array){
this.blocks = [];

while(array.length){
this.blocks.push(array.splice(0,8));
}

this._currentBlock = this.nextBlock();
}
Reader.prototype = {
currentBlock: function(){
if(!this._currentBlock.length){
this._currentBlock = this.nextBlock();
}
return this._currentBlock;
},
readNext: function(count){
count = count || 1;
var output = [];

while(count--){
var value = this.currentBlock().shift();

switch(value){
case 253: value = this.nextBlock(); break;
case 254: value = []; break;
default : value = [value]; break;
}

output = output.concat(value);
}

return output;
},
nextBlock: function(){
return this.blocks.shift();
},
peek: function(){
return this._currentBlock[0];
},
buildCases: function(){
var cases = [];

do{
var obj = {};
var i = cases.length + 1;

obj['Case ' + i + 'Variable A'] = this.readNext();
obj['Case ' + i + 'Variable B'] = this.readNext();
obj['Case ' + i + 'Variable C'] = this.readNext(3);

cases.push(obj);
}
while(this.peek() !== 0);

return cases;
}
};

var reader = new Reader([101, 103, 253, 253, 253, 102, 104, 254, 73, 32, 100, 111, 110, 39, 116, 32, 107, 110, 111, 119, 32, 119, 104, 97, 116, 32, 105, 115, 32, 32, 32, 32, 254, 254, 101, 102, 254, 254, 254, 0]);
var cases = reader.buildCases();

关于javascript - 基于多个因素转换 Javascript 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24362368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com