2017-05-07 133 views
-5

我怎样才能重写这段代码来对象的JavaScript。由于阵列使用被禁止,我只能在这里使用对象。坚持向数组推送值,我想将这个值推入对象。如何将数组转换为JavaScript中的对象?

var container = []; 
document.addEventListener("submit", function(e){ 
    e.preventDefault(); 
}); 
window.addEventListener("load",function(){ 
    var submit = document.getElementsByClassName("btn-primary"); 
     submit[0].addEventListener("click",add,false); 
    document.getElementById("pobrisi").addEventListener("click",deleteAll,false); 

    var dateElement = document.getElementById('datum'); 
     dateElement.valueAsDate = new Date(); 
    var today = new Date(); 
    var dd = today.getDate(); 
    var mm = today.getMonth()+1; 
    var yyyy = today.getFullYear(); 
    if(dd<10){ 
     dd='0'+dd 
    } 
    if(mm<10){ 
     mm='0'+mm 
    } 
    today = yyyy+'-'+mm+'-'+dd; 

    dateElement.setAttribute("min",today); 
}); 

function add() { 

    var title = document.getElementById("title").value; 
    var type = document.getElementById("type").value; 
    var datum = document.getElementById("datum").value.split("-"); 
     datum = datum[2]+". "+datum[1]+". "+datum[0]; 
    var data = new Book(title,type,datum); 

    container.push(data.add()); 
    display(); 
} 

function display(data) { 

    var destination = document.getElementById("list"); 
    var html = ""; 

     for(var i =0;i <container.length; i++) { 
      html +="<li>"+container[i]+"</li>"; 
     } 
     destination.innerHTML = html; 
} 
function deleteAll(){ 
    container=[]; 
    document.getElementById("list").innerHTML=""; 
} 

想知道可以编写此代码whitout任何阵列用法。

+1

是否允许使用像var myVar = {key:value,key :value} –

+0

是的,我被允许使用对象,但不知道如何使用。 – Slasher

+0

你有没有考虑学习如何使用对象? –

回答

0

JavaScript对象是去

1-定义新的对象一个好办法:

var myVar = {}; 

var myVar = new Object(); 

2-用法

// insert a new value, it doesn't matter if the value is a string or int or even another object 
// set a new value 
myVar.myFirstValue="this is my first value"; 
// get existing value and do what ever you want with it 
var value = myVar.myFirstValue 
1

由于这是作业,我觉得我不应该为你解决,而是帮助你在正确的方向。

像浆纱提到你可以使用对象

使用JavaScript对象一本书看起来像

const book = { 
    title: 'my awesome title', 
    type: 'novel' 
}; 
  • 本书对象
  • 标题是一个值的属性“我真棒标题'
  • 类型是属性值'小说'

但对象也可以有其他对象作为值。像

const BookShelf= { 
    Book1: { 
     Title: 'my awesome title', 
     Type: 'novel' 
    }, 
    Book2: { 
     Title: 'my horrible title', 
     Type: 'sci-fi' 
    } 
}; 

东西,你可以参考在书架上的书有两种方式

const book1 = BookShelf.Book1 // Returns the book1 object 
const title1 = Book1.Title; // Get the title 
const sametitle = BookShelf.Book1.Title // Returns title for book1, same as above. 

您还可以使用括号:

const book1 = BookShelf['Book1']; 
const title1 = BookShelf['Book1']['Title]; 

你甚至可以像一个对象上做出新特性这个:

const Book3 = { 
    Title: 'running out of ideas' 
    Type: 'memoir' 
};  
BookShelf['Book3'] = Book3; 

现在BookShelf具有Book3属性。所以,你的书架物体看起来像

const BookShelf= { 
    Book1: { 
     Title: 'my awesome title', 
     Type: 'novel' 
    }, 
    Book2: { 
     Title: 'my horrible title', 
     Type: 'sci-fi' 
    }, 
    Book3 = { 
     Title: 'running out of ideas' 
     Type: 'memoir' 
    };  
}; 

这应该让你开始:)

+0

你应该提到,这是滥用对象*,因为*数组是不允许的 - 即,*如果*数组是可用的,对象应该永远不会被这样使用 – naomik

2

初始言论

这里的问题,我估计是你没有学过的基础知识数据抽象呢。如果你不知道如何实现一个数组,你可能不应该依赖于一个数组。对象和阵列非常普遍,因为它们非常有用。但是,如果您不知道具体的数据类型是如何提供给您的(即,它提供了什么便利?),那么很可能您会滥用类型

如果您将代码放在这里,但是这样的技术不在班上,你很明显会从外部获得帮助。假设教师的课程安排合理,您应该能够根据您已经涵盖的材料解决问题。

根据你的代码,很明显你真的尝试了很多,但你为什么认为这里的人会拿出一个你的老师会接受的答案?我们应该如何知道可以使用什么


一个有趣的练习仍然

OK,所以(我们认为)我们需要数组,但让我们假装数组不存在。如果我们可以在下面得到这个代码,我们可能不完全有一个数组,但我们有一些工作数组。

最重要的是,如果我们能够在下面使用这些代码,我们就会知道如何创建一个可以保存动态数值的数据类型。只有这样我们才能开始真正了解阵列正在为我们做些什么。

// make a list 
let l = list(1) // (1) 

// push an item on the end 
l = push(l, 2) // (1 2) 

// push another item on the end 
l = push(l, 3) // (1 2 3) 

// display each item of the list 
listeach(l, function (x) { 
    console.log(x) 
}) 

// should output 
// 1 
// 2 
// 3 

运行的演示

我们所要做的就是使代码位(上图)的工作,而无需使用任何阵列。我会进一步限制自己,并且只有使用函数,if/else和等于test ===。我在你的代码中看到了这些东西,所以我认为我也可以使用它们。

但我应该相信你的老师会让你写这样的代码吗?它的工作原理,当然,但我不认为它给你带来任何接近你的答案

var empty = function() {} 
 

 
function isEmpty (x) { 
 
    return x === empty 
 
} 
 

 
function pair (x,y) { 
 
    return function (p) { 
 
    return p(x,y) 
 
    } 
 
} 
 

 
function head (p) { 
 
    return p(function (x,y) { 
 
    return x 
 
    }) 
 
} 
 

 
function tail (p) { 
 
    return p(function (x,y) { 
 
    return y 
 
    }) 
 
} 
 

 
function push (l, x) { 
 
    if (isEmpty(l)) 
 
    return list(x) 
 
    else 
 
    return pair(head(l), push(tail(l), x)) 
 
} 
 

 
function list (x) { 
 
    return pair(x, empty) 
 
} 
 

 
function listeach (l, f) { 
 
    if (isEmpty(l)) 
 
    return null 
 
    else 
 
    (f(head(l)), listeach(tail(l), f)) 
 
} 
 

 
// make a list 
 
let l = list(1) // (1) 
 
// push an item on the end 
 
l = push(l, 2) // (1 2) 
 
// push another item on the end 
 
l = push(l, 3) // (1 2 3) 
 

 
// display each item of the list 
 
listeach(l, function (x) { 
 
    console.log(x) 
 
})


致闭幕词

它显示为寿,你可以使用一个对象来代替一个数组。被接受的答案(在这个时候)显示了对一个对象如何被用来解决你的问题的非常狭窄的理解。在这个人为的演示之后,您是否确信您正确且有效地使用对象?

你知道如何实现一个对象吗?你能履行这个合同吗(下面)?我的意思是,你能写出函数object,setget,以便下面的表达式计算出它们的预期结果吗?

如果不明显,则不允许使用Object来实现此目的。演习的全部意义就是让你还没有获得

m = object()       // m 

set(m, key, x)      // m 
get(m, key)       // x 

set(m, key2, y)      // m 
get(m, key2)       // y 

set(m, key3, set(object(), key4, z)) // m 
get(get(m, key3), key4)    // z 

我将离开这个作为练习你和我强烈建议你做它数据类型。我想你会在这个过程中学到很多东西,并且深入理解和欣赏像Array或者Object这样的高级数据类型给你的

相关问题