library(shiny)
setUnitUI <- function(id) {
ns <- NS(id)
selectInput(ns('unit'), 'unit', c('km', 'mile'))
}
setValueUI <- function(id) {
ns <- NS(id)
uiOutput(ns('dynamicSlider'))
}
showValueUI <- function(id) {
ns <- NS(id)
textOutput(ns('value'))
}
ui <- fluidPage(
setUnitUI('unit'),
setValueUI('value'),
showValueUI('show')
)
setUnitModule <- function(input, output, session) {
reactive(input$unit)
}
setValueModule <- function(input, output, session, unitGetter) {
output$dynamicSlider <- renderUI({
ns <- session$ns
unit <- unitGetter()
if (unit == 'km') {
sliderInput(ns('pickValue'), paste('Pick value in', unit),
min=0, max=150, value=0)
} else {
sliderInput(ns('pickValue'), paste('Pick value in', unit),
min=0, max=100, value=0)
}
})
reactive(input$pickValue)
}
showValueModule <- function(input, output, session, unitGetter, valueGetter) {
output$value <- renderText(paste('You chose', valueGetter(), unitGetter()))
}
server <- function(input, output, session) {
unitGetter <- callModule(setUnitModule, 'unit')
valueGetter <- callModule(setValueModule, 'value', unitGetter)
callModule(showValueModule, 'show', unitGetter, valueGetter)
}
shinyApp(ui, server, options=list(launch.browser=TRUE))
上面是具有大量数据重复的二维数组,该数组需要通过以下规定进行简化:
因此结果将如下所示
所以结果将显示如下:
var mycars = [['Ford', 'Fiesta', 'Manual', 'Rp. 160.000.000'],
['Ford', 'Fiesta', 'Manual', 'Rp. 163.000.000'],
['Ford', 'Fiesta', 'Automatic', 'Rp. 170.000.000'],
['Ford', 'Fiesta', 'Automatic', 'Rp. 175.000.000'],
['Ford', 'Fiesta', 'Automatic', 'Rp. 173.000.000'],
['Ford', 'Focus', 'Manual', 'Rp. 350.000.000'],
['Ford', 'Focus', 'Automatic', 'Rp. 400.000.000'],
['VW', 'Golf', 'Manual', 'Rp. 360.000.000'],
['VW', 'Golf', 'Manual', 'Rp. 365.000.000'],
['VW', 'Golf', 'Automatic', 'Rp. 390.000.000']];
上面的结果可以像开头一样再次解压缩。
答案 0 :(得分:0)
您可以采用一个临时数组,并在同一索引处对照tmeporary数组的值检查该值,如果相同则采用空字符串''
,或通过将该值存储到临时数组来获得该值
要进行解压缩,可以对临时数组进行分配,然后检查实际值是否为truthy,然后采用该值或采用临时数组的值。返回该值。
var data = [['Ford', 'Fiesta', 'Manual', 'Rp. 160.000.000'], ['Ford', 'Fiesta', 'Manual', 'Rp. 163.000.000'], ['Ford', 'Fiesta', 'Automatic', 'Rp. 170.000.000'], ['Ford', 'Fiesta', 'Automatic', 'Rp. 175.000.000'], ['Ford', 'Fiesta', 'Automatic', 'Rp. 173.000.000'], ['Ford', 'Focus', 'Manual', 'Rp. 350.000.000'], ['Ford', 'Focus', 'Automatic', 'Rp. 400.000.000'], ['VW', 'Golf', 'Manual', 'Rp. 360.000.000'], ['VW', 'Golf', 'Manual', 'Rp. 365.000.000'], ['VW', 'Golf', 'Automatic', 'Rp. 390.000.000']],
compressed = data.map((t => a => a.map((v, i) => v === t[i]
? ''
: t[i] = v
))([])),
decompressed =data.map((t => a => a.map((v, i) => t[i] = v || t[i]))([]));
console.log(compressed);
console.log(decompressed);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
这是一个数据结构问题。
您将需要2个for
循环。
逻辑很简单,将使用另外两个数组一个2D和一个1D:
i=1
的第二个开始循环。j=0
启动另一个循环。arr1[i][j] === arr[i-1][j]
是,然后将“”推到arr3.push('')
,如果否,则将arr1[i][j]
推到{{1} }。arr3.push(arr1[i][j])
分配给arr3
。这是工作逻辑
`
arr2.push(arr3)
`