我有2个阵列,我想要一个笛卡尔积.举个例子:
客户数组:
[10,A]
[11,B]
Run Code Online (Sandbox Code Playgroud)
债务人数组:
[88,W]
[99,X]
Run Code Online (Sandbox Code Playgroud)
我想生成一个新的customerDebtor数组:
[10,A,88,W]
[10,A,99,X]
[11,B,88,W]
[11,B,99,X]
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用此代码:
for (var i = 0; i < customerArray.length; i++) {
for (var l = 0; l < debtorArray.length; l++) {
$.each(customerArray[i], function (ndx, val) {
//???? push values into customerDebtorMatrix array
});
}
}
Run Code Online (Sandbox Code Playgroud) 我是初学者,所以如果这是微不足道的,请原谅我的无知。
我有一个未知长度的 javascript 对象,每个属性的值都是一个数组(对我来说也是未知长度)。例如:
var obj = {"varA":[1,2,3],
"varB":['good','bad'],
"varC":[0,100],
"varD":['low','med','high']
}
Run Code Online (Sandbox Code Playgroud)
我想遍历每个属性并为每个属性值组合创建一个新对象。如果我知道属性的数量,我可以强制使用 for 循环,但是有没有一种方法可以在不知道要硬编码多少个循环的情况下进行枚举?
我基本上想做这样的事情:
var oblist = [];
for (a in varA){
for (b in varB){
for (c in varC){
for (d in varD){
oblist.push({"varA":varA[a], "varB":varB[b], "varC":varC[c], "varD":varD[d]});
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这样oblist将包含以下对象:
{"varA":1, "varB":"good", "varC":0, "varD":"low"}
{"varA":1, "varB":"good", "varC":0, "varD":"med"}
...
{"varA":3, "varB":"bad", "varC":100, "varD":"high"}
Run Code Online (Sandbox Code Playgroud)
谢谢!
编辑:看,我不是在寻求 for 循环或索引语法帮助。我在问如果我不知道对象中的属性数量怎么办(例如 varA、varB、varC、varD、varE,我知道我可以拥有 varZZ),所以我不能只是努力-代码 4 for 循环。有没有办法使用 obj[Object.keys(obj)[i]].length 设置它?
我需要调用以下函数cross4次,对于x和y变量的所有排列,值为1和-1;
我的方法:
var p = [-1, 1];
p.forEach(function(x) {
p.forEach(function(y) {
cross(x, y);
});
});
Run Code Online (Sandbox Code Playgroud)
有没有更短的方法这样做?
我正面临一个挑战,我有三个数组,每个数组只包含数字.我有一个函数get_sum,函数接收2个参数,一个数组数组和一个数字.这个数字是我希望通过从每个数组中求和一个或多个数来获得的总和,例如:如果我有2个数组[[1,2,3], [1,2,3]]而第二个参数是4
函数将返回将总和为4的数量的组合数.案件:
1+3 = 4
2+2 = 4
3+1 = 4
Run Code Online (Sandbox Code Playgroud)
所以函数将重新调整int 3
我编写了下面的函数,它工作得很好,但我正在寻找一种方法来提高它的效率.目前,如果我有少于6个数组,它将工作,如果我有一百个数组,我希望它工作.有没有可以帮助我的阵列功能?
这是代码:
<?php
function get_sum ($dice, $sum) {
$sumcount = array();
$num_of_dice = count($dice);
foreach($dice[0] as $die1){
foreach($dice[1] as $die2){
if($num_of_dice == 5){
foreach($dice[2] as $die3){
foreach($dice[3] as $die4){
foreach($dice[4] as $die5){
if($die1 + $die2 + $die3+ $die4 + $die5 == $sum){
$good_res = array();
array_push( $good_res, $die1, $die2, $die3, $die4, $die5);
array_push($sumcount, $good_res);
}
}
}
}
}
if($num_of_dice == …Run Code Online (Sandbox Code Playgroud) 我正在尝试提出一种算法,该算法将采用任何多维数组并将其转换为具有唯一项的数组:
例:
var arr = [
["bananas", "oranges"],
["cars", "trucks", "airplanes"],
["Jim", "Bob", "David", "Diana"]
];
// I need to create an array that will contain a unique record of each item in the array
/*
NEED TO OUTPUT TO
newArr = [
["bananas", "cars", "Jim"],
["bananas", "cars", "Bob],
["bananas", "cars", "David],
["bananas", "cars", "Diana],
["bananas", "trucks", "Jim"],
["bananas", "trucks", "Bob],
["bananas", "trucks", "David],
["bananas", "trucks", "Diana],
["bananas", "airplanes", "Jim"],
["bananas", "airplanes", "Bob],
["bananas", "airplanes", "David],
["bananas", "airplanes", "Diana],
["oranges", …Run Code Online (Sandbox Code Playgroud) TypeScript 4.0 开始支持Variadic Tuple Types的概念,这是一种很好的类型构造,可以在连接函数等中使用。文档中的一个示例:
type Arr = readonly any[];
function concat<T extends Arr, U extends Arr>(arr1: T, arr2: U): [...T, ...U] {
return [...arr1, ...arr2];
}
Run Code Online (Sandbox Code Playgroud)
我感兴趣的是这种类型构造是否可用于键入笛卡尔积函数。然后,该函数应从参数推断(混合)类型以生成其返回类型。因此,如果我输入,[number[], string[]]我希望输出的类型为[number, string][]. 在此线程中可以找到笛卡尔积的多个实现,但没有一个是严格类型化的。这是一个例子:
const cartesian =
(...a) => a.reduce((a, b) => a.flatMap(d => b.map(e => [d, e].flat())));
Run Code Online (Sandbox Code Playgroud)
我当前使用的实现不使用可变元组类型,并且需要显式类型转换:
const cartesian = <T extends any[]>(...arr: any[][]): T[] =>
arr.reduce<T[]>(
(a, b) => a.flatMap<T>(c => b.map<T>(d => [...c, d] as T)),
[[]] as T
);
const …Run Code Online (Sandbox Code Playgroud) cartesian-product typescript typescript4.0 variadic-tuple-types
假设你有这个逻辑表达式
(A or B or C) and (D or E) and (F or G or H)
Run Code Online (Sandbox Code Playgroud)
正如您在这里看到的,我们在括号内有 OR 运算符,在括号外有 AND 运算符。我们可以说这个逻辑表达式是 AND(OR) 类型。
我想将这个表达式转换为 OR(AND)。
例子:
(A or B) and (C or D) = (A and C) or (A and D) or (B and C) or (B and D)
Run Code Online (Sandbox Code Playgroud)
实现这一点的简单方法(在 JavaScript 中):
class OrNode<C = string> {
/* constructor logic */
nodeType = 'OR';
children: C[];
}
class AndNode<C = string> {
/* constructor logic */
nodeType = 'AND';
children: …Run Code Online (Sandbox Code Playgroud) 我正在开发一个电子商务 JavaScript 应用程序,并尝试根据属性创建产品变体。
如果产品具有以下属性:
尺寸:小号、中号、大号
颜色:红色, 蓝色
材质:棉、羊毛
我想要这样的结果[{color: "Red", sizes: "Small"}, {color: "Blue", sizes: "Small"}, {color: "Red", sizes: "Medium"}, {color: "Blue", sizes: "Medium"}, {color: "Red", sizes: "Large"}, {color: "Blue", sizes: "Large"}]
我已经这样做了,但是有没有简单的方法可以做到这一点?
这是我完成的代码:
let attributes = {
color: ['Red', 'Blue'],
sizes: ['Small', 'Medium', 'Large'],
material: ['Cotton', 'Wool']
};
let getProducts = (arrays) => {
if (arrays.length === 0) {
return [[]];
}
let results = [];
getProducts(arrays.slice(1)).forEach((product) => {
arrays[0].forEach((value) => {
results.push([value].concat(product));
});
}); …Run Code Online (Sandbox Code Playgroud)我有两个数组:
let array1 = ["aaa","bbb"];
let array2 = ["f1","f2","f3"];
Run Code Online (Sandbox Code Playgroud)
如何获得以下结果?
aaa f1, aaa f2, aaa f3, bbb f1, bbb f2, bbb f3
Run Code Online (Sandbox Code Playgroud)