我有一个javascript对象。
{
A: 1,
B: 2,
C: 2,
D: 1,
E: 1,
F: 4,
G: 6,
H: 2
},
我想获取一个四个字母的字符串,具体取决于哪个键具有最高的值,但是只能按照以下16种组合按在对象中出现的顺序来构成该字符串:
A or B
C or D
E or F
G or H
因此,有16种可能的组合。上面的示例将导致字符串“ BCFG”
有任何想法吗?
答案 0 :(得分:2)
您可以
var object = { A: 1, B: 2, C: 2, D: 1, E: 1, F: 4, G: 6, H: 2 },
result = Object
.entries(object)
.reduce((r, a, i) => {
if (i % 2) {
r[r.length - 1].push(a);
} else {
r.push([a]);
}
return r;
}, [])
.map(([a, b]) => a[1] > b[1] ? a[0] : b[0])
.join('');
console.log(result);
答案 1 :(得分:1)
我比较对象中的每一对,然后从较高的一对构造结果字符串。
const obj = { A: 1, B: 2, C: 2, D: 1, E: 1, F: 4, G: 6, H: 2 } //"BCFG"
let getHighest = (obj) => {
let result = "";
// Convert the object into an array
obj = Object.keys(obj).map(function(key) {
return [key, obj[key]];
});
// Iterate through the array by i + 2 (skipping 1 in each loop)
for (let i = 0, len = obj.length; i < len; i += 2){
// The first one of each pair is more than the other one
if (obj[i][1] > obj[i+1][1]){
// Add the letter to the result
result += obj[i][0];
}
// The second is greater or equal
else {
// Add the letter to the result
result += obj[i+1][0];
}
}
return result;
}
console.log(getHighest(obj));
答案 2 :(得分:0)
var values = {
A: 1,
B: 2,
C: 2,
D: 1,
E: 1,
F: 4,
G: 6,
H: 2
};
var result = Object.keys(values).reduce(function(result, value, index, array) {
if (index % 2 === 0) {
result.push(array[values[value] > values[array[index + 1]] ? index : index + 1])
}
return result;
}, []).join('');
答案 3 :(得分:0)
package i
import (
)
type A interface {
GetB() B
GetC() C
}
type B interface {
UseC()
}
type C interface {
UseB()
}
---------------------------------------------------
package a
import (
"fmt"
"basics/importCycleIssue/issueFix/b"
"basics/importCycleIssue/issueFix/c"
"basics/importCycleIssue/issueFix/i"
)
type A struct {
B *b.B
C *c.C
}
func NewA() *A {
a := &A{}
a.B = b.NewB(a)
a.C = c.NewC(a)
return a
}
// These methods implement i.A and return the i.B and i.C interface types
func (a A) GetB() i.B {
return a.B
}
func (a A) GetC() i.C {
return a.C
}
---------------------------------------------------
package b
import (
"fmt"
"basics/importCycleIssue/issueFix/i"
)
type B struct {
a i.A
}
func NewB(a i.A) *B {
b := &B{a: a}
return b
}
func (b *B) UseC() {
fmt.Println("need to use C:",b.a.GetC())
}
----------------------------------------------------
package c
import (
"fmt"
"basics/importCycleIssue/issueFix/i"
)
type C struct {
a i.A
}
func NewC(a i.A) *C {
c := &C{a: a}
return c
}
func (c *C) UseB() {
fmt.Println("need to use B:",c.a.GetB())
}
可能是您所要求的最简单的版本。创建可以用作索引的数组,然后以2个为一组。
您可以使用更多聪明的答案,但是它不能作为您的作业;)