我是Javascript和编程的新手,所以如果这个问题很愚蠢,请原谅。我想知道是否可以重用或引用代码块,特别是对象数组。目前,完全相同的代码块被使用了8-10次,并且代码块需要定期更新,这意味着我们必须更新相同的代码块8-10次。如果有一种方法可以定义代码块,以便它可以被引用/重用,并且对这一代码块的更改将在整个引用中反映出来,那么脚本不仅会变得更容易管理,而且还会变成原来大小的一半。
该脚本用于通过预出价和标题竞价的广告交付,如果这很重要。基本上,设置是一个包含广告单元的数组,每个广告单元包含一个标识符代码、允许的大小格式和一个投标人数组。这是这个数组的投标人,我想重用。下面我将为一个广告单元(匿名)提供一个当前代码的示例。
到目前为止,我还没有成功地在网上找到任何解决方案。
var adUnits = [
{
code: "0000001",
sizes: [[980, 300], [980, 150]],
// The code below is what I want to reuse
bids: [
{
bidder: "bidder1",
params: {
mid: 000001,
adxDomain: 'adx.domainhere.net'
}
},{
bidder: "bidder2",
params: {
accountId: '00002',
siteId: '00002',
zoneId: '000002'
}
},{
bidder: "bidder3",
params: {
mid: 000003,
adxDomain: 'adx.domeinhere.net'
}
},{
bidder: 'bidder4',
params: {
placementId: '00000004'
}
},{
bidder: 'bidder5',
params: {
placementId: '00000005',
keywords: {
'no-sno-publishergroup': ['nameIdentifier']
},
user: {
externalUid: getAdId()
}
}
}]有谁能给我指个方向吗?
编辑:
内部的更改仅限于添加新的投标人(具有自己的参数的bidder6、bidder7等),这意味着数组中的对象数量可能会增加。可能的是,投标人的顺序也可以改变,所以不依赖索引的解决方案将是很好的。
另请注意,我们在脚本上有大约20+广告单元,其中许多单元具有相同的对象数组(竞标人及其参数),但一些广告单元具有略有不同的数组(参数值不同)。总共有4-5组不同的数组我需要能够在脚本中重用。因此,我需要能够分别引用它们。
发布于 2019-07-02 21:53:56
您可以使用相同的数组。当你使用它们作为参数传递或直接修改时,它是通过引用发生的。这意味着原始数组将发生变化。
发布于 2019-07-02 22:19:05
我不太清楚你想要什么。下面是我最好的猜测。我们集中了出价列表和一个按名称检索出价列表的函数。然后,主代码可以在需要的任何地方调用该函数。
const getAdId = ((n) => () => n++)(0) // dummy
// `allBids` and `getBids` need to be in some central location
const allBids = {
bidder1: {
mid: '000001',
adxDomain: 'adx.domainhere.net'
},
bidder2: {
accountId: '00002',
siteId: '00002',
zoneId: '000002'
},
bidder3: {
mid: '000003',
adxDomain: 'adx.domeinhere.net'
},
bidder4: {
placementId: '00000004'
},
bidder5: {
placementId: '00000005',
keywords: {
'no-sno-publishergroup': ['nameIdentifier']
},
user: {
externalUid: getAdId()
}
}
// all other bids here.
}
const getBids = (names) => names .map (name => ({
bidder: name,
params: allBids [name] || {}
}))
// This needs to have a reference to `getBids`, via an `import`, `require` or whatever mechanism you choose.
var adUnits = [{
code: "0000001",
sizes: [[980, 300], [980, 150]],
// Now you can just pick the bids you want from the list
bids: getBids(["bidder1", "bidder2", "bidder3", "bidder4", "bidder5"])
}]
console .log (
adUnits
)
// somewhere else
// ... getBids(['bidder3', 'bidder7', 'bidder2', 'bidder6'])
在这里,参数列表在任何调用者之间通过引用共享,但整个bidder对象不是。这两种方法都很容易改变。要停止按引用共享,您可以执行以下操作
const getBids = (names) => names .map (name => ({
bidder: name,
params: clone(allBids [name] || {})
}))使用一些合适的clone实现。
如果您想共享整个对象,只需将其存储在主对象中:
const allBids = {
bidder1: {
bidder: 'bidder1`,
params: {
mid: '000001',
adxDomain: 'adx.domainhere.net'
}
}
/* ... */
}并将getBids函数更改为
const getBids = (names) => names .map (name => allBids [name] )https://stackoverflow.com/questions/56853824
复制相似问题